从延迟ajax调用返回数据
Returning data from a deferred ajax call
我试图从异步调用返回数据,但没有得到任何返回。
下面的代码被注释以进一步解释:
function displayBox() {
var data = JSON.parse(getApiLocalStorage('getApi')); // 1. get the data
console.log('data is '+data); // <-- never gets called
}
function getApiLocalStorage(cookieName, url) {
var cookieName = cookieName || 'getApi',
cookieUrl = url || 'https://s.apiUrl.com/75/f.json',
store = null;
if (store === null) { // if null, go get the data
$.when( getApi(cookieName, cookieUrl) ).then( // 2. it's not there so wait for the data to come through
function(data) {
console.log(data); // <-- when data comes back, this is ok
return data; // <-- this seems to do nothing
}
);
}
}
function getApi(cookieName, url, callback) {
var deferred = $.Deferred();
$.ajax({
url: url,
type: 'get',
dataType: 'json',
async: true,
success: function(jsonData) {
var data = JSON.stringify(jsonData);
deferred.resolve(data);
}
});
return deferred.promise();
}
displayBox(); // start the process
问题是,当调用displayBox()
时,为什么不从$.when( getApi(cookieName, cookieUrl) )
返回数据?
getApiLocalStorage
没有return
语句,因此它将始终返回undefined
。将其传递给JSON.parse()
将抛出异常。在到达console.log
行之前终止函数。
Promises使得向异步函数传递回调更容易。
promise使得在异步函数被调用后可以将回调函数传递给异步函数。
promise不会使异步函数同步。它们不允许您在捕获最终结果之前返回最终结果。
相关文章:
- AJAX调用并在Node中获取返回数据
- 角度服务未返回数据
- 统计ajax返回数据中的html元素
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- Imgur API图像搜索未返回数据
- javascript对象显示为null,但object.properties返回数据
- 如何从ajax调用JQuery返回数据
- 试图从嵌套的回调函数返回数据
- NodeJS FS 不从多个文件返回数据
- ajax函数未在C#中返回数据
- 如何在公共js模块中从web服务返回数据
- 将字符串与 JSON 对象组合以返回数据
- 嵌套异步函数未及时返回数据的问题
- NodeJS JSONStream 以一个长字符串的形式返回数据
- 如何使用 HTML 图像请求将数据发送到服务器,或返回数据作为响应
- 从 Angular 模态服务中的模态主体模板返回数据
- jQuery 每个循环返回数据两次
- $.getJSON 在返回数据后不会运行函数
- 如何访问返回数据中的特定json值
- 工厂返回数据后未设置角度$scope