我对承诺非常陌生,以下代码会产生一些意想不到的结果,但我不知道为什么。承诺在等待结果前被解雇
Main.js中的Taskrunner.SyncObjects函数应该等待填充的selectedCourses变量,但不是它立即触发。这导致使用空的selectedCourses变量。
为什么TaskRuner.SyncObjects函数在得到结果之前运行?
Main.js
function StartSync(){
var a = Settings.LoadCourseList(standardOSPathUserData);
var b = a.then(function(){
console.log("b is running");
var selectedCourses = Settings.courseList;
return TaskRunner.SyncObjects(selectedCourses).then(function(){
fileSyncRunning = false;
});
}).catch(function(error){
console.log("StartSync Error message: " + error);
});
}
Settings.js
Settings.LoadCourseList = function(osPath){
var pathToCourseListSettings = osPath + courseListFileName;
return new Promise(function(resolve, reject){
try {
return connection.Login().then(function(){
return connection.GetCourseList().then(function(result){
var allCourses = [];
for(var p=0; p<=result.length-1;p++){
allCourses.push({courseID: result[p].courseID, courseName: result[p].courseName, selected: true});
}
courseListJSON = JSON.stringify(allCourses);
return courseListJSON;
}).then(function(courseListJSON){
fs.appendFileSync(pathToCourseListSettings,courseListJSON,encoding='utf8');
console.log("New Course settings file created and filled: " + pathToCourseListSettings);
return resolve();
});
}).then(function(){
return resolve();
});
} catch (e) {
console.log("FAIL courseList settingsfile creation - Error: " + e.code);
return reject(e);
}
});
};
什么是'TaskRunner.SyncObjects'? – trincot
@trincot这是一个我不能发布代码的承诺函数。你认为问题在于这个功能吗?结果需要在“TaskRunner.SyncObjects”函数之前定义,所以此函数的内部工作无关紧要。对? – Dragon54
事实上,如果你期望'SyncObjects'运行之前的结果,那么它与该函数无关。我误解了这个问题。 – trincot