1

ES6 モジュールと、それらの間の関数をコールバックとして正しく呼び出す方法について質問があります。

「page_API.js」を取り、データを受信するとコールバック関数が呼び出されます

// Make a call to our server, Once we've recieved data we'll call our callback

import {requestExecuteAsync} from "../xml_functions";

export const getData = () => {
    requestExecuteAsync('api/getData', "dataRecieved");
};

 export const dataRecieved = () => {
     alert('Recieved Data');
 };

この requestExecuteAsync などを処理する「xml_functions.js」で、サーバーが応答したら dataRecieved を呼び出したいと思います。

以前は、私が扱っていたコードベースは多くの JS ファイルで構成され、すべての関数がグローバル名前空間に存在していたため、関数は次のように機能していました。

// once data has been retrieved from server
if (callbackparamsArr.length) {
    window[callback](res, callbackparamsArr);
} else {
    window[callback](res);
}

ただし、dataRecieved のスコープがなくなったため、コールバック関数はウィンドウで未定義になりました。

xml_functions 内に dataRecieved 関数を含めてみました

import { dataRecieved } from "../MyPage/MyPage_API.js";

そして、ただ電話する

[callback](res)

しかし、「dataRecieved」インポートが requestExecuteAsync で定義されている別の文字列を与えられているため (例えば、「dataRecieved」ではなく「_Data_Recieved_」と呼ばれます。どうすればよいかわかりません。

どんな助けでも大歓迎です!

ありがとう

4

1 に答える 1

3

呼び出したいコールバック関数の名前を渡すべきではありません。関数自体を渡すだけです:

import {requestExecuteAsync} from "../xml_functions";

export function getData() {
    requestExecuteAsync('api/getData', dataReceived);
//                                     ^^^^^^^^^^^^
}
export function dataReceived() {
    alert('Recieved Data');
}

export function requestExecuteAsync(path, callback) {
    …
    if (typeof callback == "function") callback(res);
    …
}

しかし、ES6 を使用しているため、コールバック関数をまったく渡す必要がないように、promise を確認することをお勧めします。

于 2016-10-25T12:09:27.920 に答える