リクエストパッケージでイメージを一括ダウンロードする機能を記述しています。 ダウンロード部分は動作しますが、Promise配列にパラメータを渡す際に問題があります。 ループ内にパラメータを渡すプロミス
私はこれを実行する
function downloadImages(data) {
var promises = [];
var promise, local, id, url;
for (var i in data) {
(function(i) {
local = "public/images/".concat(data[i].id, ".png");
url = data[i].img_url
id = data[i].id
promise = request.get({
url: url,
local: local,
id: id,
encoding: 'binary'
}, function(err, res) {
if (!err && res.statusCode === 200) {
fs.writeFile(local, res.body, {
encoding: 'binary'
}, (err) => {
if (!err) {
doSomething()
} else {
console.log("Error Downloading image")
}
})
}
})
promises.push(promise)
})(i)
}
Promise.all(promises);
}
私はいくつかのことを試しましたが、解決策に近づくことはできません。何か基本的なイムが間違っているのか、それとも何か簡単なことがありますかいくつかの助けに非常に感謝しています!
あなたは 'i'で行ったように、変数' local'、 'id'、' url'をループ本体の中で宣言するのはどうですか? – Bergi
'request'は実際に約束を返しますか?あなたは[このような約束でリクエストを包む]必要はありません(https://stackoverflow.com/questions/41412512/node-js-promise-request-return)?特に 'request-promise'と呼ばれる別のパッケージがnpmにあることを知っているからです。 – Andy
'data'は配列です:' for ... in'列挙型を使わないでください! '(https://stackoverflow.com/q/500504/1048572)代わりに 'map'を使うと、あなたの問題を最も簡単に解決できます。 – Bergi