当前位置:首页 > 英文周记 > 正文内容

deferred「deferred payment LC」

更新时间:2026-07-18 17:49:17 周记网4年前 (2023-01-23)英文周记117

jQuery中的Deferred和promise 的区别

Deferred 和 Promise

deferred「deferred payment LC」

ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同。不过它们的作用可以简单的用两句话来描述

Deffered 触发 resolve 或 reject

Promise 中申明 resolve 或 reject 后应该做什么(回调)

在 jQuery 中

var deferred = $.Deferred(); var promise = deferred.promise();

在 ES6 中

var deferred = Promise.defer(); var promise= defered.promise;

MDN 宣布 Deferred 在 Gecko 30 中被申明为过期,不应该再使用,而应该用 new Promise() 来代替。关于 new Promise() 将在后面说明。

jQuery 的 Deferred/Promise

jQuery 中最常用的 Promise 对象是 $.ajax() 返回的,最常用的方法不是 then ,而是 done 、 fail 和 always 。除了 $.ajax() 外,jQuery 也提供了 $.get() 、 $.post() 和 $.getJSON() 等简化 Ajax 调用,它们返回的和 $.ajax() 的返回值一样,是个 Promise 对象。

实际上 $.ajax() 返回的是一个 jqXHR 对象 。但 jqXHR 实现了 jQuery 的 Promise 接口,所以也是一个 Promise 对象。

done() 、 fail() 和 always()

done() 添加 deferred.resolve() 的回调, fail() 添加 deferred.reject() 的回调。所以在 Ajax 调用成功的情况下执行 done() 添加的回调,调用失败时执行 fail() 添加的回调。但不管成功与否,都会执行 always() 添加的回调。

这里 done() 、 fail() 和 always() 都是以类似事件的方式添加回调,也就意味着,不管执行多次次 done() 、 fail() 或 always() ,它们添加的若干回调都会在符合的条件下依次执行。

一般情况下会这样执行 Ajax

// 禁用按钮以避免重复提交 $("#theButton").prop({ disabled: true }); // 调用 Ajax 提交数据,假设返回的是 JSON 数据 var jqxhr = $.ajax("do/example", { type: "post", dataType: "json", data: getFormData() }); jqxhr.done(function(jsonObject) { // Ajax 调用成功 console.log("success with data", jsonObject); }).fail(function() { // Ajax 调用失败 console.log("failed") }).always(function() { // 不管成功与否,都会执行,取消按钮的禁用状态 $("#theButton").prop({ disabled: false }); });

上面是最普通最常用的用法,但是在一个项目中总是这么写 Ajax,有点累,稍微约定一下再封装一下就使用起来就会便捷得多。首先,假设我们定义返回的 JSON 是这样的格式:

{ "code": "int, 0 表示成功,其它值表示出错", "message": "string, 附加的消息,可选", "data": "object,附加的数据,可选 }

然后为项目公共类 app 定义一个 ajax 方法

app.ajax = function(button, url, data) { if (button) { button.prop("disabled", true); } return $.ajax(url, { type: "post", dataType: "json", data: data }).done(function(json) [ if (json.code !== 0) { showError(json.message || "操作发生错误"); } }).fail(function() { showError("服务器错误,请稍后再试"); }).always(function() { if (button) { button.prop("disabled", false); } }); }; // 调用 app.ajax("do/example", getFormData().done(function(json) { if (json.code === 0) { // 只需要处理正确的情况啦 } });

deferred.then 和 deferred.done.fail 的不同

 then()和done().fail().process()的差别是

then: function( /* fnDone, fnFail, fnProgress */ )会生成一个新的deferred,return jQuery.Deferred(function( newDefer )。初始化这个新deferred时,执行function( newDefer ),这个function添加一个callback func到前一个deferred。这个callback func是从老deferred到新deferred的桥梁,从deferred[ tuple[1]]到newDefer[ tuple[0] + "With" ]。对於每个deferred[ tuple[1] ],如果有对应的then()所带function( /* fnDone, fnFail, fnProgress 之一*/ ),这个函数就是

function () {

var returned = fn.apply( this, arguments );

if ( returned jQuery.isFunction( returned.promise ) ) {

returned.promise()

.done( newDefer.resolve )

.fail( newDefer.reject )

.progress( newDefer.notify );

} else {

newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, [ returned ] );

}

}

then所带函数会被执行,返回returned,如果jQuery.isFunction( returned.promise ),则调用这个returned.promise的done、fail和progress,它们会对应触发newDefer的resolve、reject、notify; 否则 returned 传入新的deferred,newDefer执行action + “with”;

如果没有对应的then()所带函数,简单执行newDefer[ action ]。

上面的第一个result是第一个result的最后一个done()的输出,前一个done的return不会传递到这里,所以result是resolve的第一个参数。

第二个result是第二个deferred的输出,第一个then所带的function的输入,传入第二个deferred,因此第五个done能够接受到2*3的result。

第三个result是第三个deferred的输出,第二个then执行时,只有a,没有b,所以result是NaN。

deferred是什么意思

deferred

递延

双语对照

词典结果:

deferred

[英][dɪ'fɜ:d][美][dɪ'fɜ:d]

adj.延期的,缓召的; 

v.拖延,延缓,推迟( defer的过去式和过去分词 ); 服从某人的意愿,遵从; 

什么是Deferred

延期付款信用证是指受益人不开具汇票,仅向开证行或其指定**提交规定的单据,付款行在未来某一特定日期付款的信用证。简而言之,就是不要求开立汇票的远期信用证。由于该信用证无需开立汇票,因此无法进行贴现业务。

确定到期日的方法:

1.交单日后若干天付款,如:15 days after presentation of documents

2.装运日后若干天付款,如:30 days after the date of shipment

或提单日后若干天付款,如:30 days after B/L date

3.固定的将来日付款。如:on (a future date) fixed

Deferred-Long-Term-Asset-Charges是什么意思

Deferred-Long-Term-Asset-Charges

递延长期资产收费

deferred 英[dɪ'fɜ:d]

美[dɪ'fɜ:d]

adj. 延期的,缓召的;

v. 拖延,延缓,推迟; ( defer的过去式和过去分词 ) 服从某人的意愿,遵从;

[网络] 延时; 推迟的; 延期;

[例句]The Working Group deferred its consideration of this paragraph.

工作组推迟了对本款的审议。

[其他] 形近词: transferred referred preferred

标签: deferred

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。