【问题标题】:How to run these promises in order如何按顺序运行这些 Promise
【发布时间】:2020-11-25 08:39:05
【问题描述】:

所以下面的代码将显示我正在尝试从文件中读取 athelets 和部门。

一个部门有一个运动员列表,所以首先我想映射该部门的每个运动员并将该运动员列表分配给该部门。控制台日志显示以下内容:假设每个部门有 5 名运动员。

所以我希望console.log("TEST_1") 打印 5 次,console.log("TEST_2") 打印 1 次,所有这些都针对每个部门。

var array1 = [];
await Promise.all(departaments.map(async dp => {

        array1 = [];
        await Promise.all(athletes.map(async at => {

            var athlete = new Athlete();
            athlete.name = at.name;
            athlete.weight = at.weight;

            array1.push(athlete._id);
            athlete.save();
                        console.log("TEST_1");

        })).then(() => {

            var dep = new Department();
            dep.name = dp.name;
            Object.assign(dep.athletes, array1);

            dep.save();
            console.log("TEST2");
        });
    })).then(async () => {
    ............not relevant..............
}

但这段代码的作用是:打印所有“TEST_1”,然后才打印“TEST_2”,因此它将最后 5 名运动员放在所有部门。

我尝试更改 asyncawait 但它不起作用...

你能帮帮我吗?

【问题讨论】:

    标签: javascript node.js promise async-await es6-promise


    【解决方案1】:

    我不确定我是否理解代码的实际作用。另外我认为你错过了使用“等待”可以让你从 Promises 中使用 .then() 和 .catch() 解放出来。但我猜你必须将其更改为:

    var array1 = [];
    await Promise.all(departaments.map(async dp => {
    
            array1 = [];
            await Promise.all(athletes.map(async at => {
    
                var athlete = new Athlete();
                athlete.name = at.name;
                athlete.weight = at.weight;
    
                await athlete.save();
    
                // maybe wait till the ORM's .save() operation provides an id?
                array1.push(athlete._id);
    
                            console.log("TEST_1");
    
            }));
    
            var dep = new Department();
            dep.name = dp.name;
            Object.assign(dep.athletes, array1);    
    
            await dep.save();
    
            console.log("TEST2");
    
        })).then(async () => {
        ............not relevant..............
    }
    

    【讨论】:

    • 感谢您的回复,但此替代方案现在将所有运动员放在每个部门内,我正在阅读的文件每个部门有 5 名运动员。
    • 只有“部门”和“运动员”变量。您应该扩展您的初始问题并向我们展示变量/文件的外观。这取决于您如何循环数据以及何时创建用户/部门并将谁分配给哪个。
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 2023-03-04
    • 2022-01-19
    • 2015-10-02
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多