2017-07-04 37 views
-1

我有正在一个异步调用 并在sucess,它使另一个异步调用如何等待ASYC呼叫,直到链成功

前一个功能: -

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(() => { 
}) 
} 

发行成功的功能是它只是等待,直到期函数的调用ASYC苏是cceeded它不是等待函数2的异步调用成功

我知道我可以像ASYN调用链,但它不是可能的,因为不可避免的情况

在这方面的任何宝贵意见或引线写会有很大的帮助

+0

你希望函数3在函数1和函数2完成后触发? –

+0

我的代码流是这样从function3,我正在进行function1调用和函数1调用是依赖于function2。所以,一旦function1和function2成功,我想要我的逻辑。 有意义吗? – user3677291

+0

你的问题是,你不'''''''回调'从'then'回调中使用的承诺,所以承诺链不知道该等什么。 – Bergi

回答

0

如果使用async await当你在你的代码中提到,你可以只使用它这样的:

await function1(); 
await function2(); 
await function3(); 

同时加入了async关键字的函数声明:

function1 = async() => { 

} 

另一种选择是promisify你的函数,然后打电话给他们这样的:

function1() 
.then(function2) 
.then(function3) 
.catch() {} 
0

如果你想要一个承诺,依赖于另一个诺言,你需要returnthen的相关承诺。

您的代码不什么用的function2结果:

return fetch("myurl") 
    .then((json) => { 
    function2(json) 

    }) 

这应该读

.then((json) => { 
    return function2(json) 
}) 

then整点是,它允许后续承诺通过链从回调中返回它们。

0

承诺只有当你返回它们才能获得链接。在下面的示例中,

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关键字。确保当你调用一个触发承诺的方法时,添加'返回'关键字