【发布时间】:2018-06-08 05:12:10
【问题描述】:
由于我使用 XMLHttpRequest 发出的异步请求,我想要构建的库有问题。我会用一些代码来解释:
(function(root,factory){
if( typeof define === "function" && define.amd ){
// AMD module
define([], factory);
}else{
global.tof = factory();
}
})(this, () => {
const obj = {
datas: {},
get: function(){}
...
}
const url = "...";
let request = new XMLHttpRequest();
request.open('GET',url);
request.responseType = 'json';
request.send();
request.onload= function(){
obj.datas = request.response;
}
return obj;
});
我使用回调确保接收数据并在加载数据时定义我的模块,但是当我使用 requireJS 加载“库”时,它仍然会在我的模块真正定义之前触发。
(function(root,factory){
function myCallback(r){
if( typeof define === "function" && define.amd ){
// AMD module
define('tof',[], factory(function(r){
return r;
}));
}
}
factory(myCallback);
})(this, function foo(callback){
const obj = {
datas: {},
get: function(){}
...
}
const url = "...";
let request = new XMLHttpRequest();
request.open('GET',url);
request.responseType = 'json';
request.send();
request.onload= function(){
obj.datas = request.response;
callback(obj);
}
});
我用 requireJS 测试我的模块的另一个脚本:
require(['tof'], function(tof){
// return undefined because of my async request
console.log(tof);
});
我该如何解决这个问题?
【问题讨论】:
标签: javascript asynchronous xmlhttprequest requirejs amd