HTTPS関数がリアルタイム関数のような非同期の約束を返す必要がありますか? HTTPS関数で返されていない(res.status.sendなどを使用しています)、firebase/function-samplesもそうではないようです。しかし、ドキュメントは少し曖昧ですhttps://firebase.google.com/docs/functions/terminate-functions。非同期https firebase関数
答えて
HTTP関数は現在、返された約束を尊重しません - 通常終了するためには送信結果が必要です。 HTTP関数が結果を送信しない場合は、タイムアウトします。
他のすべてのタイプの関数は、非同期作業が完全に完了するのを待つために返される約束を必要とします。
待機する非同期作業がない場合は、ただちに戻ることができます。
これらは、ドキュメントに記載されている3つのケースです。
クラウド機能は、彼らが何を意味するか、次の
res.redirect()、res.send()、またはres.end()
のいずれかで "終了" を返す必要があります約束を返すことで、あなたのリアルタイムデータベースのノードを更新したクラウド機能があると想像して、HTTPリクエストに応答する前にその作業を完了したいと考えています。
例コード
let RemoveSomething = functions.https.onRequest((req, res) => {
cors(req, res,() => {
// Remove something
DoDatabaseWork()
.then(function (result) {
res.status(200).send();
})
.catch(function (err) {
console.error(err);
res.status(501).send();
});
});
});
更新:追加DoDatabaseWork例。
const DoDatabaseWork = function() {
return new Promise(function (resolve, reject) {
// Remove SomeNode
admin.database().ref('/someNode/').remove()
.then(function (result) {
resolve();
})
.catch(function (err) {
console.error(err);
reject();
});
});
}
2番目の例では、どのような種類の機能が表示されていませんが、HTTP機能には適切ではありません。 HTTP関数は、返された約束を現在観察していません。それらは、関数が完了したときにのみ、送信された結果をインジケータとして使用します。 –
最初のコードはHTTP関数で、DoDatabaseWork "2番目の例"を呼び出し、データベース作業 "ノードの削除"を完了するのを待ちます。HTTP関数はステータスコード200または501を返します。 – Kim
その場合はremove()から約束してください。そのために新しい約束をする必要はありません。 –
- 1. Firebase非同期関数の構文エラー
- 2. Firebase関数の非同期関数から返すものは?
- 3. 非同期関数
- 4. 「非同期キーワード非同期」関数を「非同期キーワード非同期」関数に変換できますか?
- 5. React-Nativeで非同期関数内で非同期関数を呼び出す - Firebase
- 6. MeteorJS非同期コード同期Meteor.methods関数
- 7. 非同期関数の同期例外
- 8. ダブル非同期AJAX関数
- 9. NSAutoReleasePoolと非同期関数
- 10. 非同期ヘルパー関数
- 11. コールバックと非同期関数
- 12. Node.js非同期関数、process.nextTick()
- 13. Firebase関数 - NodeJS:非同期配列処理
- 14. componentWillMountでfirebaseオブジェクトを返さない非同期関数
- 15. dispatchEventは同期関数または非同期関数です
- 16. 同期関数の非同期関数への影響
- 17. 非同期関数の非同期ラップ関数を作成する方法は?
- 18. 非同期非同期テストJavaScript関数を待機します
- 19. 流星群サーバの非同期関数
- 20. ネストされた非同期関数
- 21. mongodb関数の非同期コールバック
- 22. angularjsアプリケーションの非同期関数
- 23. 非同期programmicと仮想関数
- 24. JavaScriptの再帰非同期関数
- 25. 非同期関数呼び出し
- 26. Python Asyncioの調整非同期関数
- 27. 非同期関数を反復する
- 28. python 2.7非同期関数とtkinter
- 29. 別のビューでスウィッチキャッチ非同期関数
- 30. QMLのJS非同期関数
ありがとう@Doug Stevenson 私はresの結果を送っていますが、返された非同期コードがあればHTTP機能が有効かどうかはわかりませんでした。私がここで読んでいるドキュメントでは、HTTP機能が非同期を返し、レスポンスを送信する必要があるかのように読み込まれます:https://firebase.google.com/docs/functions/terminate-functions –
HTTPトリガーは応答の送信を要求します。あなたの仕事を調整するために約束を使用する必要がある場合は、それを行いますが、関数から約束を返すことは何もしません。コード内のすべての終了ポイントで応答を送信する必要があります。 –
パーフェクト、ありがとうDoug –