我知道这是一个简单、愚蠢的问题,但我已经坚持了两天了。
考虑有一个函数,管理从某些对象类型 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/