我知道这是一个简单而愚蠢的问题,但是自从我被困在它上面已经有两天了。
考虑有一个函数,从某个对象类型Course
管理对象类型UnsafeCourse
的创建,如下所示:
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
s的不同方法,但没有用。
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
是一个好习惯吗?
是否会产生沉重的开销?
答案 0 :(得分:2)
我在第一个例子中看不到任何异步方法。 Array.forEach
不是异步函数。
您只需在forEach的回调中返回课程,但必须直接在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, []);
}