代码如下:
function $myAjax(url, method, data, callback) {
let p = new Promise(function(resolve, reject) {
$Ajax.request({
url: url,
method: method,
data: data,
success: function(resp) {
callback(resp);
resolve();
},
failure: function(xhr) {
//todo
reject();
}
});
});
return p;
}
let $docs = document;
$docs.getElementById('xxx').onclick = function() {
$myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid', 'get', { 'memberid': 1920740, 'activeid': 1 }, function(resp) {
console.log(resp);
console.log(1);
}).then($myAjax('https://mhd.uzai.com/api/CommonActive/GetPrizeGivingByUserid', 'get', { 'memberid': 1920740, 'activeid': 1 }, function(resp) {
console.log(resp);
console.log(2);
}));
};`
也就是说有时候会先打印出来2,后打印出来1;
想要执行的顺序是:1,2
请高手指点!
额, 你这个写错了,正确写法如下
雷雷
你这写法,就是说没有调用reject函数,在成功触发后,你的resp输出的是什么?
你需要用数组来保证队列,用reduce来保证返回值的叠加操作。
然后自己实现promise
推荐用终极方案 async。
首先,你要理解一点,
Promise
不需要传callback
,Promise
就是为了不传callback
回调的。先看下
Promise
语法吧。建议看看阮一峰写的教程:Promise
所有 promise 中的then 都是按顺序调度立即执行,这些 then 中任意一个都无法影响或延误对其他的调用。也就是你的第二个 ajax 是不会等第一个 ajax 请求晚再执行。 解决办法
请贴出你的代码,而不是截图,这是提问的一个小技巧哦,图片不怎么清晰。