Javascript 在承诺链中使用wait
我刚升级到节点8,想开始使用async/await。我遇到了一个错误,花了我一段时间才解决,实际上我只是想知道是否有更优雅的方式。我不想在此时重构整个函数,因为它会导致所有的二次重构Javascript 在承诺链中使用wait,javascript,node.js,async-await,Javascript,Node.js,Async Await,我刚升级到节点8,想开始使用async/await。我遇到了一个错误,花了我一段时间才解决,实际上我只是想知道是否有更优雅的方式。我不想在此时重构整个函数,因为它会导致所有的二次重构 async doSomething(stuff) { ... return functionThatReturnsPromise() .then((a) => ...) .then((b) => ...) .then((c) => { const user
async doSomething(stuff) {
...
return functionThatReturnsPromise()
.then((a) => ...)
.then((b) => ...)
.then((c) => {
const user = await someService.createUser(stuff, c);
user.finishSetup();
});
};
有没有一种方法可以在承诺链中使用
wait
,而不必将上面的所有内容重构为async
?回调函数不声明为async
函数。您只能在异步
函数中直接等待承诺
async doSomething(stuff) {
// ...
return functionThatReturnsPromise()
.then((a) => /* ... */)
.then((b) => /* ... */)
.then(async (c) => {
const user = await someService.createUser(stuff, c);
return user;
});
};
此外,如果您正在利用async
函数,则不需要使用then
async doSomething(stuff) {
// ...
const a = await functionThatReturnsPromise();
const b = // ...
const c = // ...
const user = await someService.createUser(stuff, c);
return user;
};
那么(异步(c)=>{是否有效?这可能是我之前处理这个问题时错过的…我将整个链包装在一个异步IEFE中。谢谢!在这个简单的示例中,我不需要等待,但在我拥有的实际代码中,需要对用户做一些事情。是的,
wait
只能在异步的函数中使用代码>-异步函数中的函数不是异步函数,除非它本身被特别标记为异步函数:p我不明白的是,当整个函数都是异步
函数时,为什么函数仍在使用承诺。是的,我现在明白了,这要感谢@Jaromanda X。我也明白,如果我转换为整个函数,就不会有什么问题了ion改为async/await,但这是应用程序的核心功能,我不想做得太多,因此我努力保留承诺链,只需添加我需要的新部分。如果我将整个功能改为async/await,你是什么意思?你可以从asy内部await
任何promise
nc
函数。现在整个函数是一个很长的承诺链。我想避免转换每个“链接”在要调用的链中,等待
ed。调用的代码不需要重构,也不知道调用异步函数和返回承诺的常规函数之间的区别。根据规范,调用异步函数时,它返回承诺。@CodesLikeA\u Mokey我明白了,这是一个好的决定:)希望将来会有一些测试来减少像这样的主要重构的不确定性