var preadd = $.ajax({
type: 'POST',
url: url,
data: {
some data
},
success: function(output) {
if (output != 12 && output != 13) {
some code here...
var arr = [];
arr.push.apply(arr, val.split(","));
arr.splice(-1, 1);
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].trim();
}
chk dup1 is another ajax
function outside
var chk = chkdup1();
console.log(chk);
chk.then(function() {
if (result == 13) {
rem = confirm("Duplicate data will be removed, are you sure!");
if (rem == false) {
return false;
}
if (rem == true) {
remdens1();
}
}
});
}
if (output == 13) {
rem = confirm("Duplicate data will be removed, are you sure!");
if (rem == true) {
remdens1();
}
}
if (output == 12) {
$('#valensdata').html("success").css('color', 'green');
}
return rem;
}
});
preadd.then(function() {
console.log(rem);
if (rem == false) {
return false;
}
fnensadd();
});
- 即使我在 preadd 的 .then 函数中按确认中的取消,
- 我无法获取存储在 rem 变量中的值。
- 即使返回 false,底部的 preadd.then 函数也会执行。
任何人都可以指导我吗?
最佳答案
即使我在确认中按下取消。然后 preadd 的功能:
Promise Preadd has no knowledge of cancel. You are returning a value false when cancel is clicked.
我无法获取存储在 rem 变量中的值。
Assuming rem is a local variable of success function, the variable dies when success function is completed. A bad way of coding would be creating rem in larger scope , eg sibling of preadd
即使返回 false,底部的 preadd.then 函数也会执行。
resolveCB of preadd.then( resolveCB, rejectCB) will always be called unless an until there is some error or promise is rejected. Returning false is not same as rejecting promise.
说完这句话后,要么用“然后”,要么用“成功”。如果你想防止 CB Hell,请始终使用 Promise。
带有 Promise 的更好的代码结构如下
var preadd = $.ajax({
type: 'POST',
url: url,
data: {
some data
}
preadd.then(function() {
// Success of PreAdd
return chkdup1()
}).then(function(){
// Success of chkdup1
//by some internal logic build rem
if(rem)
return Promise.resolve(rem )
return Promise.reject(rem)
}).then(function(data){
// rem was true
fnensadd();
},function(error){
// rem was false
});
关于javascript - AJAX - 带有嵌套的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116375/