栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451924.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号