我什么时候应该拒绝承诺?

2024-04-03

我正在编写一些使用 Promise 的 JS 代码。例如,我打开一个表单弹出窗口并返回一个jQuery 延迟 http://api.jquery.com/jQuery.Deferred/目的。它的工作原理如下:

  • 如果用户在表单上单击“确定”并进行验证,则 Deferred 解析为表示表单数据的对象。

  • 如果用户单击取消,则 Deferred 将解析为 null。

我想要决定的是,延期者是否应该拒绝,而不是解决?更一般地说,我想知道什么时候应该解析为空对象之类的东西,什么时候应该拒绝?

下面是一些演示这两个位置的代码:

// Resolve with null.
var promise = form.open()
    .done(function (result) {
        if (result) {
            // Do something with result.
        } else {
            // Log lack of result.
        }
    });

// Reject.
var promise = form.open()
    .done(function (result) {            
        // Do something with result.            
    })
    .fail(function () {
        // Log lack of result.
    });

您的两种策略的语义并不完全相同。明确拒绝延期是有意义的。

例如,$.when() http://api.jquery.com/jQuery.when/只要传递的延迟对象成功,就会继续累积结果,但会在第一个失败时退出。

这意味着,如果我们重命名你的两个承诺promise1 and promise2分别:

$.when(promise1, promise2).then(function() {
    // Success...
}, function() {
    // Failure...
});

即使第一个表单被取消,上面的代码也会等到第二个表单关闭,然后再调用传递给的回调之一then()。调用的回调(成功或失败)仅取决于第二种形式的结果。

然而,该代码不会等待如果取消第二个表单,则在调用失败回调之前关闭第一个表单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该拒绝承诺? 的相关文章

随机推荐