我在组合javascript回调和揭示模块模式时遇到了问题。
我尝试做的是使用carsData.getCars()
函数方法返回HTTP响应文本。
基本上我想做的是:
xhr.onreadystatechange
函数返回到私有getData
函数getData
函数返回到公共getCars
函数(或调用返回值的getCars
函数)我让它使用同步AJAX模式,但我知道它不是javascript开发中的最佳实践。
我试图让它与回调一起使用,但失败了。 在javascript中甚至可行吗?
P.S。我在Vanilla JS中使用XMLHttpRequest
而不是其他框架用于学习目的。
'use strict';
var carsData = (function() {
var carsElement = document.getElementById('carsListing'),
successHandler = function(data) {
carsElement.innerHTML = data.data;
//return data;
},
dataWrapper = "",
getData = function(callback) {
var url = 'data/cars.json',
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
var status;
var data;
if (xhr.readyState == 4) { // `DONE`
status = xhr.status;
if (status == 200) {
data = JSON.parse(xhr.responseText);
successHandler && successHandler(data);
callback(data);
return data;
}
}
};
xhr.open('get', url, false); // synchronous js
xhr.send();
return xhr.onreadystatechange();
//return 'xx';
}
return {
getCars: function() {
return getData(function(data){
console.log(data); // Object {data: Array[5]}
})
}
}
})();
答案 0 :(得分:0)
没有。你不能这样做。我发现这就是为什么你通常会看到发送到DOM对象的结果。因为他们在那里等待答案。您的返回声明(假设您来自非原型语言)看似违反直觉,已经运行了。它似乎不会,但它有,因为你知道的异步性质。你必须使用Promises,或者你必须让你的回调用“等待”回调数据的数据做一些事情,就像你使用successdata
一样。