gpt4 book ai didi

javascript - 为什么这个 Promise 不能正常工作?

转载 作者:行者123 更新时间:2023-11-28 19:32:21 26 4
gpt4 key购买 nike

我是 jQuery Promises 的新手,但我在应用程序的其他部分很好地使用它们,但这个部分似乎没有按预期工作。似乎没有等待返回就执行下一个代码。

function setActivityOnGrid(){
...snip...
var sameActivityCnt = $(actId).length;
if(sameActivityCnt){
sameActivityDialog().then(function(retVal) {
if(retVal == true){
activityid += "-"+sameActivityCnt++;
}
});
}
//code here is being executed before the dialog is even shown
}

function sameActivityDialog(){
var deferred = $.Deferred();

bootbox.confirm("You have already added this activity. Would you like to add it again?", function(result) {
deferred.resolve(result);
});
return deferred.promise();
}

最佳答案

//在对话框显示之前执行此处的代码移至此处:

var sameActivityCnt = $(actId).length;
if(sameActivityCnt){
sameActivityDialog().then(function(retVal) {
if (retVal === true){
activityid += "-"+sameActivityCnt++;
}

// code goes here!!!!

});
}

在 then 回调函数(或后来链接的 then 函数)内。

替代方案

var sameActivityCnt = $(actId).length;
sameActivityDialog().then(function(retVal) {
if(sameActivityCnt && retVal === true){
activityid += "-"+sameActivityCnt++;
}

// code goes here!!!!

});

var promise = sameActivityDialog();
var sameActivityCnt = $(actId).length;

if(sameActivityCnt){
promise = promise.then(function(retVal) {
if (retVal === true){
activityid += "-"+sameActivityCnt++;
}
return retVal;
});
}

promise = promise.then(function(retVal) {
// code goes here!!!!
return retVal;
});

如果你把这个逻辑分成更小的函数,那么你实际上可以很好地组合它:

function doIf(condition, fn) {
return function(data) {
if (condition) {
return fn(data);
} else {
return data
}
};
}

function appendID(retVal) {
if (retVal === true){
activityid += "-"+sameActivityCnt++;
}
return retVal;
}

function doMoreStuff(retVal) {
// code goes here!!!!
return retVal;
}

var sameActivityCnt = $(actId).length;

sameActivityDialog()
.then(doIf(sameActivityCnt, appendID))
.then(doMoreStuff);

关于javascript - 为什么这个 Promise 不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26511267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com