将另一个模块调用为回调函数[ES6]

时间:2016-10-25 11:25:59

标签: javascript webpack es6-modules

我对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中定义的不同字符串(E.G它将被称为“_Data_Recieved_”而不是“dataRecieved”,我不知道该怎么做。

非常感谢任何帮助!

由于

1 个答案:

答案 0 :(得分:3)

您不应传递要调用的回调函数的名称。只需传递函数本身:

$("#existingParent").on("click", ".child", function() {
  // do stuff
});

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

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

但是既然你正在使用ES6,你可能想看看promises,这样你根本不需要传递回调函数。