私はあなたに背景を先に伝えたいと思います。すべてのダウンロードが完了した後に関数をトリガーする方法
は私は以下のような画像パラメータの配列を有する:この貫通
"imageParameters": [
{
"imageparam1": "param1",
"imageparam2": "param2",
"imageparam3": "param3"
},
{
"imageparam1": "param1",
"imageparam2": "param2",
"imageparam3": "param3"
}
]
Iループは画像ごとに固有のURLを生成します。 次に、urlが生成されるたびにdownloadImageAndSave関数をトリガーします。
imageParameters.forEach(function (image) {
var imageUrL = baseURL + "¶m1=" + image.imageparam1 + "¶m2=" + image.imageparam2 + "¶m3=" + image.imageparam3 ;
var imageparam1 = image.imageparam1;
downloadImageAndSave(imageUrL, imageparam1);
});
function downloadImageAndSave(imageUrL, imageparam1) {
console.log("Download function is triggered")
var fs = require('fs'),
request = require('request');
request
.get(imageUrL)
.on('error', function(err) {
// handle error
})
.pipe(fs.createWriteStream('./imagesLocation/' + imageparam1 + '.jpeg'));
myfunctionTobeTRiggeredAfterImagesDownloadedAndSaved();
}
機能を起動できるように、これらの画像がすべてダウンロードされて保存されていることを確認するにはどうすればよいですか?
私が抱えている問題は、コールバックを使用することです。私はすべての画像がダウンロードされて保存されると、コールバックを得る方法はありません。
ご協力いただければ幸いです。 ありがとうございます。
以下
を更新しましたが、私が達成しようとしているワークフローです。 私はこのようにエクスプレスAPIを介してユーザーから入力を受け取ります。
イメージを含む圧縮ファイルをユーザーに返します。
function returnTheZipFileToUser(id) {
var path = require('path');
var mime = require('mime');
var file = __dirname + '/public/imagelocation/' + id + '.zip';
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
}
returnTheZipFileToUserは、イメージがダウンロードされて圧縮されるまでに早すぎると呼ばれます。したがって、zipImageFiles()およびdownloadImagesToNodeServerの前に早すぎる方法でトリガされるため、image.zipファイルに問題が見つかりません。
ダウンロードが完了してからreturnTheZipFileToUser(id)がトリガーされるのを待つためにsetTimeoutを実装する方法が見つかった。しかし、画像とzipファイルのサイズによってタイミングが異なるため、これは実際の解決策ではありません。 したがって、イメージが完全にダウンロードされ、zipファイルが用意されていることを確認してからreturnTheZipFileToUserを呼び出す必要があります。
コードを適切にフォーマットしてください。 – jfriend00