【发布时间】:2021-08-23 22:25:22
【问题描述】:
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 1000)
});
let result = await promise; // wait until the promise resolves (*)
return result; // "done!"
}
f().then(result => {
return Promise.resolve(result);
}).then(r => console.log(r))
如果我从倒数第二行删除 return 关键字,上述代码将无法正常工作。我不明白为什么我们需要写一个return? Promise 的 resolve 方法本质上不是这样做的,即返回一个值吗?
【问题讨论】:
-
.then(result => { return Promise.resolve(result); })毫无意义,只需将其删除。但是,是的,如果您不返回来自then的承诺,那么您将无法链接更多的.then调用 -
这根本没有意义。
.then((result) => Promise.resolve(result))与.then((result) => result)相同,这与根本没有.then相同。 -
是的,我知道这部分根本不需要添加。但我添加它是为了理解 Promises,在我看来,原则上它应该可以工作。你能帮我理解我在倒数第二行写'return'和不写有什么区别吗?
-
您根本不需要
Promise.resolve(result)。您只需要一个返回值,例如return result。如果.then()没有返回值,则 promise 的解析值变为undefined。
标签: javascript node.js asynchronous async-await