我有一个函数,它正在进行一次异步调用,当调用成功时,它会进行另一次异步调用
例:-
function1 = () => {
/*Some required Logic*/
return fetch("myurl")
.then((json) => {
function2(json)
})
.catch((error) => {
console.log(error)
})
}
function2 = () => {
/*Some required Logic*/
return fetch("myurl2")
.then((json) => {
callthirdfunction(json)
})
.catch((error) => {
console.log(error)
})
}
这里是函数3,在这个函数中,我依赖于函数1的成功
function3 = () => {
/*Some required Logic*/
function1().then(() => {
})
}
问题是它只在等待function1的asyc调用成功,而不是在等待function2的async调用成功
我知道我能写出像链一样的asyn call,但由于不可避免的情况,这是不可能的
在这方面任何建议或线索都将大有帮助
如果您使用了标签中提到的异步等待
,那么您可以这样使用它:
await function1();
await function2();
await function3();
将async
关键字添加到函数声明时:
function1 = async () => {
}
另一种选择是允诺您的函数,然后像这样调用它们:
function1()
.then(function2)
.then(function3)
.catch() {}
如果希望一个承诺依赖于另一个承诺,则需要返回
从then
依赖的承诺。
您的代码不对function2
的结果执行任何操作:
return fetch("myurl")
.then((json) => {
function2(json)
})
应改为
.then((json) => {
return function2(json)
})
then
的全部要点在于,它允许通过从回调返回后续承诺来链接这些承诺。
只有当你兑现承诺时,承诺才会被束缚。在下面的示例中
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function add1(x) {
const a = await resolveAfter2Seconds(20);
const b = await resolveAfter2Seconds(30);
return x + a + b;
}
注意resolveafter2seconds中的return关键字。确保在调用激发promise的方法时添加“return”关键字