javascript - 如何等待 'for'循环返回

标签 javascript node.js promise

我知道这是一个简单、愚蠢的问题,但我已经坚持了两天了。

考虑有一个函数,管理从某些对象类型 UnsafeCourse 创建对象类型 Course,如下所示:

Class Schedule {
    constructor() {
        this.courses = [];
    }

    sectionNeedsCourse(unsafeCourse) {
        this.courses.forEach(function (course, index, array) {
            if (course.couldBeRepresentedBy(unsafeCourse)) {
                return course;
            }
        }

        return new Course(unsafeCourse, [some additional parameters...]);
    }
}

由于 node.js 中的内容是异步工作的,因此 for 循环已经完成。

我尝试了不同的 Promise 方法,但没有成功。

sectionNeedsCourse(unsafeCourse) {  //->  Promise
    return new Promise (function (resolve) {
        new Promise(function (resolve) {
            this.courses.forEach(function (course, index, array) {
                if (course.couldBeRepresentedBy(unsafeCourse)) {
                    resolve(eachCourse);
                }
            });

            resolve(null);
        }).then(function (result) {
            console.log(result);
            if (result != null) {
                addCourse(unsafeCourse).then(function (result) {
                    resolve(result);
                });
            } else {
                resolve(result);
            }
        });
    });
}

此外,在同一函数中使用多个 Promise 是一个好习惯吗?

这会带来沉重的开销吗?

最佳答案

我在第一个示例中看不到任何异步方法。 Array.forEach 不是异步函数。 您只需在 forEach 回调中返回类(class),但必须直接在 sectionNeedsCourse 中返回它:

sectionNeedsCourse(unsafeCourse) {
    var course = this.courses.find(function(course){
      course.couldBeRepresentedBy(unsafeCourse) ? course : false;      
    });
    return course ? course : new Course(unsafeCourse, []);
}

如您所见,我还使用 find 而不是 forEach,因为这是您此处需要的逻辑。

根据此处的要求,相同的示例稍微短一些,带有 Arrow function :

sectionNeedsCourse(unsafeCourse) {
    var course = this.courses.find(course => {
      course.couldBeRepresentedBy(unsafeCourse) ? course : false;      
    });
    return course ? course : new Course(unsafeCourse, []);
}

关于javascript - 如何等待 'for'循环返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33155902/

相关文章:

javascript - PHP、Javascript 和 Twig 模板

node.js - 如何在 sequelize 钩子(Hook)中运行另一个模型查询?

node.js - Redux 显示来自 Nodejs 后端的错误消息

javascript - 如何在 Javascript 中执行非阻塞调用? ( promise 不会那样做。)

javascript - 在 JS Promise 中调用所有 "on"事件后返回

javascript - JQuery - offset()/position() 的回调

javascript - React、contextApi 中 this.context 始终为空

Javascript:在嵌套函数中使用条件语句停止代码执行

javascript - Node.js 在脚本之间传输数据

node.js - 如何在 GraphQL 模式中使用 'Decimal' 作为字段类型?