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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

波斯汪 2019-10-16 14:32:40
我讀到用async關(guān)鍵字標(biāo)記的異步函數(shù)隱式返回一個promise:async function getVal(){ return await doSomethingAync();}var ret = getVal();console.log(ret);但這不連貫...假設(shè)doSomethingAsync()返回一個諾言,而await關(guān)鍵字將從諾言中返回值,而不是諾言itsef,那么我的getVal函數(shù)應(yīng)該返回該值,而不是隱式諾言。那到底是什么情況?用async關(guān)鍵字標(biāo)記的函數(shù)是隱式返回promise還是控制它們返回的內(nèi)容?也許,如果我們不明確地返回某些東西,那么他們會隱式地返回一個諾言...?更清楚地說,上述內(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語句不一致。似乎當(dāng)您從async函數(shù)顯式返回非承諾值時,它將強制將其包裝在Promise中。我沒有什么大問題,但是它確實違背了普通的JS。
查看完整描述

3 回答

?
喵喵時光機

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

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


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自動解包,因此,如果您確實從async函數(shù)中返回了對某個值的承諾,您將收到該值的承諾(而不是該值的承諾)。


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語句不一致??雌饋?,當(dāng)您從異步函數(shù)中顯式返回非承諾值時,它將強制將其包裝在Promise中。我沒有什么大問題,但是它確實違背了普通的JS。


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


function* foo() {

  return 'test';

}


// Logs an object.

console.log(foo());


// Logs 'test'.

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


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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