Javascript 如何等待asyc调用链成功

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,您

我有一个函数正在进行异步调用 一旦成功,它将进行另一个异步调用

例:-

现在是函数3 其中我依赖于功能1的成功

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(现在)返回的承诺