2017-03-22 8 views
4

Firebase StorageでFirebase Storageに保存されているイメージのサイズを変更したいとします。Error:Firebase Cloud関数でイメージのサイズを変更するときにECONNRESETを読み取る

Firebaseチームが提供する次の例に基づいています。https://github.com/firebase/functions-samples/blob/master/quickstarts/thumbnails/functions/index.jsデータベースイベントによってトリガされた関数を作成しようとしました。

exports.myFunction = functions.database.ref('...').onWrite(event => { 

     ... 

     // Create thumbnails 
     createThumbnail(1, ...); 
     createThumbnail(2, ...); 
     createThumbnail(3, ...); 

     ... 

     return; // <- Is this necessary ? 
}); 

function createThumbnail(...) { 

    ... 

    return bucket 
     .file(originalFilepath) 
     .download({ 
      destination: tempFilePath 
     }) 
     .then(() => { 

      console.log('OK'); 

      ... 

      // Generate a thumbnail using ImageMagick. 
      return spawn('convert', [tempFilePath, '-thumbnail', dimension + 'x' + dimension + '>', tempFilePath]) 
       .then(() => { 

        .... 

        // Uploading the thumbnail. 
        return bucket.upload(tempFilePath, { 
          destination: thumbnailUrl 
         }) 
         .then(() => { 

           ... 

          // Save thumbnailUrl in database 
          return admin.database().ref(...).set(thumbnailUrl); 
         }); 
       }); 
     }); 
} 

すべては私には罰金になります。

は、ここでは、コードの中で最も興味深い部分です。しかし、コードがconsole.log('OK');に行くことはありませんし、私はこのエラーを取得する:

Error: read ECONNRESET 
    at exports._errnoException (util.js:1026:11) 
    at TCP.onread (net.js:569:26) 

誰かがエラー何ができるか知っていますか?

は問題はすべてのあなたの非同期ジョブが完了する前に完了した約束を戻ってきているということであるあなたに

答えて

3

ありがとうございます。

あなたはこれを行うと:あなたは3つの非同期createThumbnail作業を始めていますが、すぐに戻ってきている

createThumbnail(1, ...); 
createThumbnail(2, ...); 
createThumbnail(3, ...); 
... 
return; 

。したがって、Cloud Functionsインスタンスがシャットダウンし、3 createThumbnailに完了する時間がなくなり、ECONNRESETエラーが発生したときです。

それぞれcreateThumbnailはプロミスを返します。何をする必要がある3つのcreateThumbnail約束が完了したときに完了しPromiseを返すためにPromise.allを使用している:

const listOfAsyncJobs = []; 
listOfAsyncJobs.push(createThumbnail(1, ...)); 
listOfAsyncJobs.push(createThumbnail(2, ...)); 
listOfAsyncJobs.push(createThumbnail(3, ...)); 
... 
return Promise.all(listOfAsyncJobs); // This will ensure we wait for the end of the three aync tasks above. 
関連する問題