昨天写的一个注册功能,发现一直有问题,今天测试发现,问题貌似出在insert上,果断上代码~
User.prototype.save = function (callback) { var user = { name: this.name, password: this.password, email: this.email } mongodb.open(function (err, db) { if (err) return callback(err); db.collection(‘users’, function (err, collection) { if (err) { mongodb.close(); return callback(err); } collection.insert(user, {safe: true}, function (err, user) { mongodb.close(); if (err) return callback(err); callback(null, user); }); }); }); };
我发现这个insert 里的回调 callback 给我返回的user 都是undefined,后来我查了网上,说是insert并不是立刻执行,但是有个一个问题,node的异步机制不应该是 等待其执行完毕后,再执行回调嘛~,怎么会出现这种情况呢~该如何解决呀,各位大神~~
不是的,node所有函数都是异步的,所以无法确定执行顺序,于是有了promise/A+规范
@i5ting 刚刚看了promise/A+规范,收获很多,3Q。 就是说,我应该用promise来改写我这个注册功能呗,让他符合正确的执行顺序?
@qianjiahao mongoose or mongoskin都封装好了
@i5ting ok,瞧瞧去~~