我有一个正在进行异步调用的函数 并且在成功时,它进行另一次异步呼叫
例如: -
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 我依赖于function1
的成功function3 = () => {
/*Some required Logic*/
function1().then(() => {
})
}
问题是它只是等待,直到function1的asyc调用成功,它不等待function2的异步调用才能成功
我知道我可以像asyn调用链一样写,但由于不可避免的情况,它不可能
在这方面的任何建议或领导都会有很大的帮助
答案 0 :(得分:0)
如果您在标记中使用了async await
,则可以像这样使用它:
await function1();
await function2();
await function3();
将async
关键字添加到函数声明中:
function1 = async () => {
}
另一种选择是promisify你的功能,然后像这样调用它们:
function1()
.then(function2)
.then(function3)
.catch() {}
答案 1 :(得分:0)
如果您希望一个承诺依赖另一个承诺,您需要return
来自then
的承诺承诺。
您的代码不会执行结果为function2
的任何内容:
return fetch("myurl")
.then((json) => {
function2(json)
})
应该阅读
.then((json) => {
return function2(json)
})
then
的重点在于它允许通过从回调中返回它们来链接后续的承诺。
答案 2 :(得分:0)
Promise只有在你返回时才被链接。在下面的例子中
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'关键字