为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

陪伴而非守候 2021-06-14 12:29:02
我有这个嵌套的 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 数据集进行调试时,似乎已定义并具有必要的属性。
查看完整描述

2 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您没有使用 await 的潜力。您的代码可以如此简单:


public async content() {

    let files = [];

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

        try {

            let biosample = await this.axios.get(this.currentRequest)

            let datasets = await this.axios.get(this.currentRequest + biosample.data.item)

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

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

                files.push(response.data.Item);                 

            }               

            resolve(files)

        } catch(error) {

            reject(new Error(error.response || error))

        };          

    })

}


查看完整回答
反对 回复 2021-06-18
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信