使用方法
在package.json中加入
'promise':"*"执行 npm install 加载 promise 模块
在需要的文件中引入模块
var Promise = require("promise");例子
function insertPracticeForGraphics (){ var self = this; return new Promise(function (resolve) { var newPractice = new Practice(practice); newPractice.save(function () { console.log("save practice success"); resolve(newPractice._id);//执行成功后返回值,只 }); } insertPracticeForGraphics() .then(function(newPractieId){ // @1 })
resolve(newPractice._id);//执行成功后返回值,如果有多个值的话,可以返回一个对象
当insertPracticeForGraphics 执行完成后,只执行@1 newPractieId 为 insertPracticeForGraphice返回值
如果函数3之前需要函数1、2执行完成后执行,且函数1、2的执行先后顺序没有要求可以这样控制
function Course() { } Course.prototype = { start: function() { var assignInfo = ['path_0','path_1','path_2'] var promises = []; var self = this; _(assignInfo).each(function(item) { var promise = self.updateCoursesAttrOnPath(item); promises.push(promise); }); return Promise.all(promises); }, updateCoursesAttrOnPath: function (item) { Path.update({id_name: item.id_name},{$set:{:courses:item.courses}}}, function (err) { if (err) { throw err; } resolve(item.courses); } } var course = new Course() course.start() .then(function(data_0,data_1,data_2){ //@2 })
当执行start时回执行3次updateCoursesAttrOnPath,传入参数分别为'path_0','path_1','path_2',
他们执行完的顺序不确定,但是他们执行完返回的值顺序固定分别对应 data_0,data_1,data_2;start执行完成后执行@2