不定值:承諾不會返回對象數組
我使用Q管理與Node.js的承諾,我使用easyImage處理圖像。
這段代碼工作正常,它加載,保存,剪切tmp文件夾中的圖像並將其粘貼到用戶文件夾中。我唯一的問題是將最終數據保存到數據庫。我得到了一個未定義值的數組中......
exports.postAccountImages = function(req, res, next) {
User.findById(req.user.id, function(err, user) {
var path = __dirname + '/../public/images/u/' + user._id + '/';
var max = 800;
fs.exists(path, function(exists) {
if (!exists) fs.mkdirSync(path);
});
var promises = [];
for (var key in req.files) {
if (req.files.hasOwnProperty(key)) {
(function(file) {
q().then(function() {
return promises.push(easyimg.info(file.path).then(function(image) {
easyimg.resize({
src: file.path,
dst: path + file.name,
width: (image.width >= max) ? max : image.width,
height: (image.height >= max) ? max : image.height,
quality: 80
}).then(function(image) {
fs.remove('./tmp-uploads/' + image.name);
return {
src: image.name,
main: false
};
});
}));
});
})(req.files[key]);
}
}
q.all(promises).then(function(result) {
console.log(result); // [undefined, undefined, undefined, ...]
// Here I should push result to the DB
});
});
};
您需要對承諾和異步回調進行一些學習。這個答案可能會幫助你:http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call。一般來說,您必須在異步回調中「使用」異步結果,而不是其他任何地方。 – jfriend00 2014-12-03 22:27:36
我確信我必須瞭解承諾,但是從您發佈的鏈接中,我不太確定我應該如何處理。 它用jQuery解釋了一些東西......我用Express和Node ...問題是:我怎樣才能得到回報? – 2014-12-03 22:31:13
我可以根據我的問題舉個例子嗎? – 2014-12-03 22:52:38