我对使用promises和Lodash库相对较新。当我在下面运行我的代码时,我的文件没有附加到user:username1 pass:password1
user:username2 pass:password2
user:username3 pass:password3
对象,就像我在formData
完成时所期望的那样。因此,在内部deferred.promise
完成之前,我非常确定forEach
正在完成。我所困扰的是放置fs.writefile
以便它可以工作的位置。
deferred.resolve()
这是promise返回的代码。当var formData = {}
function addAttachmentsToFormData() {
var deferred = q.defer();
_(portalOptions.attachments).forEach(function (a) {
console.log('INDEX ::: ', idx);
var letter = String.fromCharCode('A'.charCodeAt() + idx);
if (idx === portalOptions.attachments.length - 1) {
console.log('Attachments done... ');
deferred.resolve(formData);
} else {
var filePath = path.join(tempDir, a.fileName);
console.log('ATTACHMENT BUFFER ::: ', a.buffer);
fs.writeFile(filePath, a.buffer, function (err) {
if (err) {
return console.log(err);
}
var fileKey = "attachment" + letter;
formData["attachment" + letter] = {
value: fs.createReadStream(path.join(__dirname, '.tmp', a.fileName)),
options: {
filename: a.fileName,
// path: filePath,
contentType: a.contentType
}
}
// });
console.log("The attachments were saved :: ", formData);
});
idx++;
}
});
return deferred.promise;
}
此处出现在上面代码中console.log
console.log
之前的控制台中时。
formData
如果有人能够指出我做错了什么,我会很感激指导。谢谢!
更新
我重新安排了我的代码,似乎正朝着正确的方向前进。但是,我的最终var payload = addAttachmentsToFormData(portalOptions, options)
.then( function (result) {
console.log('REQUEST PAYLOAD READY ', result);
sendRequest(result)
});
未在deferred.promise
中输出formData
。我仍然不确定如何宣传我的console.log
块,以便在最终承诺返回之前写入文件并将相应的属性添加到fs.writeFile
对象。
如下面的代码所示,formData
的{{1}}完全记录了console.log
,DATA 1
的{{1}}则没有记录。再次提供这项工作的任何帮助非常感谢!
formData