您正在询问保持单个对象同步,因为几个异步操作会修改该对象。这有点含糊(您需要按顺序执行它们吗?它们会更改相同的属性吗?)很难做出一个包罗万象的解决方案,所以我建议您确定操作必须发生的顺序(如果有) ,并使用async
库来处理控制流。
如果您想将结果传递到按顺序执行的函数链,该async.waterfall
方法(下面的示例)很有用。库中还包含许多其他有用的函数,例如async.eachSeries
(按顺序对每个数组项执行一次函数)和
async.parallel
(同时执行一组函数。)所有文档都可在https://github.com/caolan/async
var async = require('async');
function calculateX(callback){
async.waterfall(
[
function(done){
var x = 0;
asyncCall1(x, function(x1){ // add x1=x+1;
done(null, x1);
});
},
function(x1, done){
asyncCall2(x1, function(x2){ // add x2=x1+2;
done(null, x2);
});
},
],
function(err, x2){
var t = x2;
callback(t);
});
};
calculateX(function(x2){
mongo.save(x2, function(err){ // or something idk mongo
if(err){ console.log(err) };
});
});