异步等待隐式返回诺言?

异步等待隐式返回诺言?,第1张

异步/等待隐式返回诺言?

返回值永远是一个承诺。如果您未明确返回承诺,则您返回的值将自动包装在承诺中。

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: 4increment(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: 5incrementTwice(3).then(num => console.log(num));

Promise自动解包,因此,如果您确实从

async
函数中返回了对某个值的承诺,您将收到该值的承诺(而不是该值的承诺)。

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: 4increment(3).then(num => console.log(num));

在我的提要中,该行为的确与传统的return语句不一致。看起来,当您从异步函数中显式返回非承诺值时,它将强制将其包装在Promise中。我没有什么大问题,但是它确实违背了普通的JS。

ES6的函数返回的值与并不完全相同

return
。这些功能称为生成器。

function* foo() {  return 'test';}// Logs an object.console.log(foo());// Logs 'test'.console.log(foo().next().value);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5427450.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存