gpt4 book ai didi

javascript - 奇怪的(或我不知道的)Promise 语法 - Complete、Fail、Done

转载 作者:行者123 更新时间:2023-12-01 02:59:56 25 4
gpt4 key购买 nike

我遇到了下面的代码块......但我不明白它。我完全理解 promise (以及与之相关的一切):

deferred.then(successCb, errorCb);

但是,下面的代码似乎有三个回调(completefaildone),我不知道从哪里开始寻找 - 我只能猜测类似可观察的成功失败最终模式,但情况似乎并非如此。

我检查了随机问题,例如 jQuery deferreds and promises - .then() vs .done()和一些文档,例如 here 。这些文档似乎暗示 complete 甚至都不是一件事,只有 always (无论 Promise 成功还是失败,在解析时都运行)、done code>('如果 $.get 成功,这将运行' - 它的名字很奇怪), fail(fail) 条件。

 var promise = $.ajax({
type: 'POST',
url: 'www.foo.com',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: muhData
});
promise.complete(function(d) {
console.debug("complete");
}).fail(function(){
console.error("failed!");
}).done(function(d){
console.log('Done');
});

tl;dr:代码有什么作用吗?

最佳答案

.complete().done().fail() 都是 jQuery 特定的实现,不遵循 Promise 标准。 jQuery 还支持 .then(),在 jQuery 3.x 中,他们试图使 .then() 符合 Promise 标准。我建议你这样做:

 $.ajax({
type: 'POST',
url: 'www.foo.com',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: muhData
}).then(function(d) {
console.debug("complete");
}, function() {
console.error("failed!");
});

或者,如果您被迫使用旧版本的 jQuery 并希望符合标准的行为,您可以这样做:

 Promise.resolve($.ajax({
type: 'POST',
url: 'www.foo.com',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: muhData
})).then(function(d) {
console.debug("complete");
}).catch(function() {
console.error("failed!");
});

这将 jQuery Promise 转换/吸收为标准 Promise,这样您就可以使用标准 .then().catch() 逻辑,并且不会感到意外其工作原理。

<小时/>

以下是 jQuery docs 中有关 .complete().done().fail() 的更多信息:

.complete() 已弃用,应使用 .always() 代替。无论 promise 履行还是拒绝,都会调用此函数(例如,始终会调用它)。

.fail().catch() 类似,因为它在 Promise 拒绝时被调用(尽管并非在所有方面都相同)。

.done() 与传递给 .then() 的第一个参数类似,因为它在 promise 履行时被调用。

老实说,我认为直接使用 jQuery Promise 逻辑并不值得,因为现在您可能在应用程序的其他地方拥有行业标准逻辑,并且使用两个略有不同的实现是相当痛苦的。对于使用 jQuery ajax 进行的简单操作,我只是坚持使用 jQuery promise 中的 .then() 。对于更多涉及嵌套或链式 promise 的事情,我使用 Promise.resolve() 转换为标准 promise ,这样我就知道它在所有情况下的确切行为,并且它会像所有其他 promise 一样工作我的代码中的 promise 。

关于javascript - 奇怪的(或我不知道的)Promise 语法 - Complete、Fail、Done,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46496686/

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