带有 for 循环的嵌套承诺不起作用

我有这个嵌套的 promise 循环,然后结束一个 for 循环,该循环将项目推送到 files 数组中。


public async content() {

        let files = [];

        return new Promise(async (resolve, reject) => {

             await this.axios.get(this.currentRequest).then(async biosample => {

                 await this.axios.get(this.currentRequest + biosample.data.item).then(async datasets => {

                     for (let i = 0; i < datasets.data.Items.length; i++) {

                        await this.axios.get(this.currentRequest + datasets.data.Items[i].Id).then(response => {

                            files.push(response.data.Item);

                        }).catch(reason => {

                            reject(reason)

                        });

                    }

                })


            }).catch(function (error) {

                reject(new Error(error.response))

            });

            resolve(files)

        })

    }

调用是正确的,因为如果我使用Promise.all([promises here]),那么它就可以工作。但我正在努力学习正确链接承诺。


当我使用 webstorm 数据集进行调试时,似乎已定义并具有必要的属性。


陪伴而非守候
浏览 161回答 2
2回答

收到一只叮咚

您没有使用 await 的潜力。您的代码可以如此简单:public async content() {&nbsp; &nbsp; let files = [];&nbsp; &nbsp; return new Promise(async (resolve, reject) => {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let biosample = await this.axios.get(this.currentRequest)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let datasets = await this.axios.get(this.currentRequest + biosample.data.item)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (let i = 0; i < datasets.data.Items.length; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; let response = await this.axios.get(this.currentRequest + datasets.data.Items[i].Id)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; files.push(response.data.Item);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resolve(files)&nbsp; &nbsp; &nbsp; &nbsp; } catch(error) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reject(new Error(error.response || error))&nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; })}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript