返回值永远是一个承诺。如果您未明确返回承诺,则您返回的值将自动包装在承诺中。
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);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)