私は次のコードで私のカスタムモジュールを持っていた:私のモジュールの外部関数を呼び出す場合、それが実行している間、私はエラーを得たの内側に私が呼ばれるしかし、もし、うまく働いた正しい非同期機能輸出
module.exports.PrintNearestStore = async function PrintNearestStore(session, lat, lon) {
...
}
:
私は、構文を変更し(node:24372) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: PrintNearestStore is not defined
:
module.exports.PrintNearestStore = PrintNearestStore;
var PrintNearestStore = async function(session, lat, lon) {
}
それは細かい内部のモジュールを動作するように始めたが、OU失敗しますモジュールtside - 私はエラーを得た:
(node:32422) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: mymodule.PrintNearestStore is not a function
だから私はにコードを変更しました:
module.exports.PrintNearestStore = async function(session, lat, lon) {
await PrintNearestStore(session, lat, lon);
}
var PrintNearestStore = async function(session, lat, lon) {
...
}
そして今、それはすべての場合に動作します:内側と外側。しかし、セマンティクスを理解したいと思ったら、それをもっと美しく短く書く方法があるのでしょうか? asyncは、モジュールの内部と外部(エクスポート)モジュールの両方を正しく定義して使用する方法ですか?
は、私が見る、ありがとうございました。関数定義( 'var'を取り除いたもの)と' module.exports'を関数定義として定義しました。内部呼び出し関数の定義の順序は重要ではないことが分かります。関数定義の前に関数呼び出しがありますが、 'module.exports'では重要です。 –
@AlekseyKontsevich:FWIW、ソースコード内の*行*が*前の行Bであるということは、行Aが*実行前*行Bより前に*実行されていることを意味するものではありません。もちろん、関数を呼び出す前に関数定義を評価しなければなりません。しかし、巻上げのために実行順序がJSでは明白ではないかもしれません。 –