2
我希望能夠將自己可能包含鏈接方法的方法鏈接在一起。我如何鏈接Q嵌套承諾?我無法讓它們以正確的順序運行
日誌應爲「第一,第二,第三」。然而,實際上它出現了「第二,第三,第一」。
我知道這段代碼有點多餘,但我只是想了解promises/node如何執行。我會如何編寫基於承諾的函數,這些函數可以鏈接在一起?
user.increaseReadings(id)
.then(function(val) { console.log("second",val); return user.findById(id); })
.then(function(val) { console.log("third",val); res.json(val); });
}
從/models/user
模塊:
exports.findById = findById;
function findById(id) {
deferred = Q.defer();
User.findById(id, function(err, doc) {
if (err) return deferred.reject(err);
deferred.resolve(doc);
});
return deferred.promise;
}
exports.increaseReadings = increaseReadings;
function increaseReadings(id) {
deferred = Q.defer();
findById(id).then(function(doc) { <-- here's the problem
doc.readings++;
doc.save(function(err, doc) {
console.log("first");
if (err) return deferred.reject(err);
deferred.resolve(doc);
});
});
return deferred.promise;
}
有道理。謝謝。 –