承诺在Lodash forEach完成之前返回

时间:2017-06-26 18:58:04

标签: javascript node.js foreach promise q

我对使用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.logDATA 1的{​​{1}}则没有记录。再次提供这项工作的任何帮助非常感谢!

formData

0 个答案:

没有答案