等待函数完成后再返回承诺

时间:2018-06-25 14:46:01

标签: javascript ecmascript-6 promise

someFunction() {
  if (array.length > 0) {
    return new Promise((resolve, reject) => {
      array.map(item => {
        AXIOS.postItem(item).catch(err => {reject('error')});
      });
      resolve('resolve');
    });
  }
}

mainFunction() {
  Promise.all([this.someFunction()]).then(() => {
    this.invokeTheRest();
  )}
}

就我而言,即使在执行或捕获resolve之前,some函数也总是返回AXIOS.postItem()

我如何等待AXIOS.postItem()执行?如果在catch中捕获了错误,我怎么不能继续进行this.invokeTheRest()

2 个答案:

答案 0 :(得分:2)

将someFunction的主体更改为:

someFunction () {
    return array.map(item => AXIOS.postItem(item));
}

以便它返回可与Promise.all一起使用的Promises数组。

答案 1 :(得分:1)

具有someFunction返回一个诺言数组,我会说这是一个编码反模式。

我要走的方法是从someFunction返回Promise.all,这将使someFunction成为Promise,然后您就可以像其他任何Promise一样使用

例如

someFunction() {
  return Promise.all(
    array.map(item => AXIOS.postItem(item)));
}

mainFunction() {
  this.someFunction().then(() => {
    this.invokeTheRest();
  });
}