Reactjs 需要知道所有异步操作何时完成

Reactjs 需要知道所有异步操作何时完成,reactjs,Reactjs,我有以下代码: callAPI() { return this.myModel.map(action(retValue => { return this.myApi.doWork(retValue.Input).then(action(model => { this.model.Input = Object.assign({}, model); this.saveState(); })).catch(error => {

我有以下代码:

callAPI() {
return this.myModel.map(action(retValue => {
      return this.myApi.doWork(retValue.Input).then(action(model => {
        this.model.Input = Object.assign({}, model);
        this.saveState();
      })).catch(error => {
        throw(error);
      });
    }));
如果我的客户端代码是这样做的:

myStore.callAPI().then(() => {
      console.log("completed");
      this.setState({ loading: false });
    });
我犯了一个错误

.then()不是一个函数

我希望在所有异步操作完成后获得回调。

请使用等待多个承诺并返回结果,这是您可以调用的另一个承诺。
。然后
打开。 为了始终在命令代码块之后返回承诺,您可以返回使代码可链接的承诺

callAPI(){
回报你的承诺(
this.myModel.map(action(retValue=>(
this.myApi.doWork(retValue.Input).then(action(model=>{
this.model.Input=Object.assign({},model);
这个.saveState();
返回承诺。解决();
}))
)));
);
}

请看一个例子:

const sleep=timeout=>newpromise(解析=>
setTimeout(()=>解析(超时),超时)
);
常量点击=超时=>{
log(`Task completed after${timeout}ms`);
返回超时;
}
常量任务=[
睡眠(1000),
睡眠(2000年),
睡眠(500),
睡眠(30),
睡眠(2500),
睡眠(450)
].map(task=>task.then(点击));
承诺。所有(任务)。然后(x=>{
控制台日志(x);

});这是故意的吗?在callAPI函数的参数中有一个大括号
myStore.callAPI({)
不,我更新了上面的帖子,但是
承诺了。所有的
都不符合你的需要吗?
那么
不是一个函数,因为你好像在返回一个数组(未知的东西给我).正如Andrew所说,您可能需要使用
Promise.all
。我非常肯定
这一点。myApi.doWork
不是一个承诺。这是他最初的错误。您应该提到这一点,并将其包装为
新承诺
在Przemysław Zalewski代码之后,我会在调用函数后立即得到所有承诺,而不是在async回来了请添加
Promise.resolve()
以始终返回(即使是空的)承诺,然后您可以将其链接起来。如果您想使用我的代码作为您答案的基础,我认为我没有遵循您的示例。