异步函数:隐式承诺返回还是显式控制?
JavaScript 中的异步函数,由 async 关键字表示,通常被认为是隐式的回报承诺。然而,仔细检查就会发现,现实情况更加微妙。
默认情况下,如果未显式返回 Promise,异步函数确实会返回 Promise。这意味着以下代码:
async function getVal() { const result = await doSomethingAsync(); return result; }
相当于:
async function getVal() { const result = await doSomethingAsync(); return Promise.resolve(result); }
但是,如果您显式返回非承诺值,该函数将自动将其包装在承诺中。例如,在下面的示例中:
async function getVal() { return doSomethingNonAsync(); }
getVal 实际上会返回一个包含 doSomethingNonAsync() 结果的 Promise 对象。
值得注意的是,这种行为与传统的 JavaScript 函数不同。当您从常规函数显式返回原始值时,它会立即返回。然而,异步函数总是返回一个 Promise,根据需要包装非 Promise 值。
这可能看起来不一致,但它与 ES6 中生成器的概念相吻合。生成器是返回与其 return 语句不同的值的函数。相反,它们产生一系列值,可以使用yield运算符迭代这些值。
例如:
function* getVal() { yield doSomethingAsync(); return 'finished'; } // Logs an object. console.log(getVal()); // Logs 'yikes' and then 'finished'. for (const val of getVal()) { console.log(val); }
以上是JavaScript 中的异步函数:隐式承诺还是显式返回值?的详细内容。更多信息请关注PHP中文网其他相关文章!