第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

異步/等待隱式返回諾言?

異步/等待隱式返回諾言?

波斯汪 2019-10-16 14:32:40
我讀到用async關(guān)鍵字標(biāo)記的異步函數(shù)隱式返回一個(gè)promise:async function getVal(){ return await doSomethingAync();}var ret = getVal();console.log(ret);但這不連貫...假設(shè)doSomethingAsync()返回一個(gè)諾言,而await關(guān)鍵字將從諾言中返回值,而不是諾言itsef,那么我的getVal函數(shù)應(yīng)該返回該值,而不是隱式諾言。那到底是什么情況?用async關(guān)鍵字標(biāo)記的函數(shù)是隱式返回promise還是控制它們返回的內(nèi)容?也許,如果我們不明確地返回某些東西,那么他們會(huì)隱式地返回一個(gè)諾言...?更清楚地說(shuō),上述內(nèi)容與function doSomethingAync(charlie) {    return new Promise(function (resolve) {        setTimeout(function () {            resolve(charlie || 'yikes');        }, 100);    })}async function getVal(){   var val = await doSomethingAync();  // val is not a promise   console.log(val); // logs 'yikes' or whatever   return val;  // but this returns a promise}var ret = getVal();console.log(ret);  //logs a promise在我的提要中,該行為的確與傳統(tǒng)的return語(yǔ)句不一致。似乎當(dāng)您從async函數(shù)顯式返回非承諾值時(shí),它將強(qiáng)制將其包裝在Promise中。我沒(méi)有什么大問(wèn)題,但是它確實(shí)違背了普通的JS。
查看完整描述

3 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

返回值將永遠(yuǎn)是一個(gè)承諾。如果您未明確返回承諾,則返回的值將自動(dòng)包裝在承諾中。


async function increment(num) {

  return num + 1;

}


// Even though you returned a number, the value is

// automatically wrapped in a promise, so we call

// `then` on it to access the returned value.

//

// Logs: 4

increment(3).then(num => console.log(num));

即使有,也是一樣await。


function defer(callback) {

  return new Promise(function(resolve) {

    setTimeout(function() {

      resolve(callback());

    }, 1000);

  });

}


async function incrementTwice(num) {

  const numPlus1 = await defer(() => num + 1);

  return numPlus1 + 1;

}


// Logs: 5

incrementTwice(3).then(num => console.log(num));

Promise自動(dòng)解包,因此,如果您確實(shí)從async函數(shù)中返回了對(duì)某個(gè)值的承諾,您將收到該值的承諾(而不是該值的承諾)。


function defer(callback) {

  return new Promise(function(resolve) {

    setTimeout(function() {

      resolve(callback());

    }, 1000);

  });

}


async function increment(num) {

  // It doesn't matter whether you put an `await` here.

  return defer(() => num + 1);

}


// Logs: 4

increment(3).then(num => console.log(num));

在我的提要中,該行為的確與傳統(tǒng)的return語(yǔ)句不一致??雌饋?lái),當(dāng)您從異步函數(shù)中顯式返回非承諾值時(shí),它將強(qiáng)制將其包裝在Promise中。我沒(méi)有什么大問(wèn)題,但是它確實(shí)違背了普通的JS。


ES6的函數(shù)返回的值與并不完全相同return。這些功能稱為生成器。


function* foo() {

  return 'test';

}


// Logs an object.

console.log(foo());


// Logs 'test'.

console.log(foo().next().value);


查看完整回答
反對(duì) 回復(fù) 2019-10-16
  • 3 回答
  • 0 關(guān)注
  • 732 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)