2016-10-25 58 views
0

我有一个关于ES6模块的问题,以及如何正确调用它们之间的函数作为回调。调用另一个模块函数作为回调[ES6]

采取“page_API.js”,在数据被收到的回调函数是在我的“xml_functions.js”在那里我处理这个requestExecuteAsync多叫

// 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'); 
}; 

现在,我想打电话给dataRecieved一旦服务器已经回应。

以前我用包括了许多JS文件,与生活在全局命名空间中的所有功能工作的代码库,因此函数像这样工作

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

但是现在的回调函数在窗口不确定的,因为它不再具有dataRecieved的范围。

我试过包括xml_functions

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

,然后里面的dataRecieved功能只需要调用

[callback](res) 

但由于“dataRecieved”进口越来越给出的定义requestExecuteAsync不同的字符串(EG将被称为“_Data_Recieved_”而不是“dataRecieved”,我不知道该怎么办。

任何帮助将不胜感激!

谢谢

+2

为什么不只是传递函数本身而不是字符串?为什么不使用Promises而不是回调? –

+0

“*以前我使用的代码库由许多JS文件组成,所有功能都位于全局名称空间*” - ouch。我很高兴ES6模块迫使你更好的方法:-) – Bergi

+0

@Bergi阿哈你告诉我!如果有机会在一个新的项目中开始重新编写一些旧的XML解析+网络代码到模块中,那就更好了! –

回答

2

你不应该传递你想调用的回调函数的名字。只是通过函数本身:

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,你可能想看看的承诺,这样你就不需要在各地传递的回调函数所有。

+0

真棒只是我以后,非常感谢! –

相关问题