gpt4 book ai didi

javascript - $q promise 未解决

转载 作者:行者123 更新时间:2023-12-02 16:53:06 25 4
gpt4 key购买 nike

我不明白为什么这没有解决,有什么想法吗? “resolve this”确实会打印,但它永远不会回到 .then 中 promise 的解决方案。

var promise = wait(); 
promise.then(function(result){
console.log("wait returned - " + result);
});

function wait(){
var deferred = $q.defer();
if(busy){
setTimeout(function(){
wait();
},500);
} else {
console.log("resolve this");
deferred.resolve("Wait is over.");
}
return deferred.promise;
};

最佳答案

以下是替代方法:

var promise = wait(); 
promise.then(function(result){
console.log("wait returned - " + result);
});

function wait(){
var deferred = $q.defer();
(function _wait() {
if (busy) {
setTimeout(_wait, 500);
} else {
console.log("resolve this");
deferred.resolve("Wait is over.");
}
})();
return deferred.promise;
};

主要区别在于,只有一个由“包装器”函数创建和返回的延迟。这个延迟最终将由 _wait 函数解决。

在您的情况下,每个后续(递归)wait() 调用都会创建一个不同的deferred 对象。其中一个对象最终将被解析,对吧 - 但只有在此时 busy 为 false 时,该对象才会与第一个 wait() 调用返回的对象相同。显然,大多数时候不会。

关于javascript - $q promise 未解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409778/

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