【发布时间】:2020-06-21 11:31:05
【问题描述】:
我的js代码需要等到ajax完成才能加载数据。
if (district_search_value[0] == true) {
var zone_search_value = checkZone(district_search_value[1], datas[i]['recipient_zone']);
console.log(zone_search_value);
}
checkZone 功能:
function checkZone(district_id, zone_name) {
var value = [];
value[0] = false;
value[1] = 0;
find_zones_from_district_id().then(function(data) {
// Run this when your request was successful
console.log(data);
var zones = JSON.parse(data);
//console.log(zones);
for (zones_row = 0; zones_row < zones.length; zones_row++) {
if (zone_name == zones[zones_row]['zone_name']) {
value[0] = true;
value[1] = zones[zones_row]['id'];
}
}
return value;
}).catch(function(err) {
// Run this when promise was rejected via reject()
console.log(err);
})
}
主要的promise函数:
function find_zones_from_district_id(district_id) {
return new Promise(function (resolve, reject) {
$.ajax({
type: 'POST',
url: 'ajaxData_for_user.php',
data: {import_excel_find_zones_from_district_id: 'district_id'},
success: function (data) {
resolve(data) // Resolve promise and go to then()
},
error: function (err) {
reject(err) // Reject the promise and go to catch()
}
});
});
}
javascript 不等待 promise 解决的原因是什么? 我也尝试过 jquery 中的 $.when ,但这也不会等待 ajax 加载数据。
【问题讨论】:
-
也许使用等待者?
-
旁注
$.ajax()返回一个thenable,它不需要包裹在Promise中 -
@STALER - 我试过 async await ,但我得到的是 Promise {
} 而不是一个值 -
@JaredSmith - 谢谢你,很有见地。
标签: javascript ajax promise