首页 > 解决方案 > 如何在继续嵌套承诺之前让代码等待响应?

问题描述

我有一些类似于以下的代码:

functionA (list) {
  list.forEach(fucntion (item) {
    functionB(item);
  });
}

functionB (item) {
  // format data
  service.init(item) // first promise
    .then(function (data) {
      // error handle
      (functionC (randomStuff) {
        // error handle
        service.getResponse(data) // second promise
          .then(function (response) {
            // this is the response value I need to pass back
          })
      })()
    }
})

我需要在开始时让 forEach 循环发送一个项目并等待响应,然后再继续处理列表中的下一个项目。关于我如何做到这一点的任何想法?

标签: javascriptasynchronouspromise

解决方案


您可以使用asyncandawait关键字使您的函数异步,因此您可以在函数内同步解决 Promise:

async functionB(item) {
  var data = await service.init(item);

  (async functionC(randomStuff) {
    var response = await service.getResponse(data);
    return response;
  })();
}

文档:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function


推荐阅读