Javascript 如何等待asyc调用链成功
我有一个函数正在进行异步调用 一旦成功,它将进行另一个异步调用 例:- 现在是函数3 其中我依赖于功能1的成功Javascript 如何等待asyc调用链成功,javascript,jquery,ajax,async-await,Javascript,Jquery,Ajax,Async Await,我有一个函数正在进行异步调用 一旦成功,它将进行另一个异步调用 例:- 现在是函数3 其中我依赖于功能1的成功 function3 = () => { /*Some required Logic*/ function1().then(() => { }) } 问题是它只是等待函数1的asyc调用成功,而不是等待函数2的异步调用成功 我知道我可以像电话一样写,但由于不可避免的情况,这是不可能的 这方面的任何建议或线索都会有很大帮助如果您使用标签中提到的async wait,您
function3 = () => {
/*Some required Logic*/
function1().then(() => {
})
}
问题是它只是等待函数1的asyc调用成功,而不是等待函数2的异步调用成功
我知道我可以像电话一样写,但由于不可避免的情况,这是不可能的
这方面的任何建议或线索都会有很大帮助如果您使用标签中提到的
async wait
,您可以这样使用它:
await function1();
await function2();
await function3();
function1()
.then(function2)
.then(function3)
.catch() {}
将async
关键字添加到函数声明时:
function1 = async () => {
}
另一个选项是调用函数,然后像这样调用它们:
await function1();
await function2();
await function3();
function1()
.then(function2)
.then(function3)
.catch() {}
如果希望一个承诺依赖于另一个承诺,则需要
从返回依赖的承诺,然后
您的代码与函数2的结果没有任何关系:
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关键字。确保在调用激发承诺的方法时,添加了“return”关键字希望函数1和函数2完成后激发函数3?我的代码流与函数3类似,我正在进行函数1调用,函数1调用依赖于函数2。所以,一旦function1和function2都成功了,我就想要我的逻辑。有意义吗?你的问题是你没有返回从回调中使用的承诺,因此承诺链不知道等待什么。@Bergi,我正在使用返回。更新了我的问题。请喝一杯look@user3677291回调本身仍然不会返回函数2(现在)返回的承诺