退空承诺

2021/01/31 03:11 · jquery ·  · 0评论

我有一个返回jQuery Promise的函数。看起来像这样:

addBooks(books: Array<Books>) {
    return $.ajax({
        url: '/Books/AddBooks/',
        type: 'POST',
        data: ko.toJSON(books),
        contentType: 'application/json'
    });
}

我这样做是为了重用此函数,并链许诺回调,例如:

addBooks.done(() => { alert("Books added!"); })

我的问题是,如果我想尽早退出addBooks并阻止访问服务器,该怎么办?例如:

addBooks(books: Array<Books>) {

    // An empty array was passed in for some reason.
    // Theres nothing to add so dont try to POST
    if (books <= 0) return null;

    return $.ajax({
        url: '/Books/AddBooks/',
        type: 'POST',
        data: ko.toJSON(books),
        contentType: 'application/json'
    });
}

我的示例无法编译,因为我的链接完成的回调示例期望addBooks返回一个Promise对象,而不是null。我怎样才能返回一个空的承诺(或者在这种情况下我应该返回什么正确的对象)?

我怎样才能返回一个空的承诺(或者在这种情况下我应该返回什么正确的对象)?

是的,这里的“空承诺”是适当的,如果您的意思是已经没有任何履行的承诺(undefinednull)。

创建此类的jQuery语法仅使用$.when一个(或不使用)参数:

if (books <= 0) return $.when(null);

您可以返回已解决的承诺:

if (books <= 0) return null;

采用

if (books <= 0) return $.Deferred().resolve();

但是请注意,jQuery的PromiseAPI会产生令人惊讶的效果:有时它会调用您的done/ then/ etc。与同步回调done/then的/ etc。打电话,有时却没有。大多数promise库都确保该调用始终是异步的,即使您正在调用done/ then/ etc。坚定地承诺。jQuery没有,因此您会得到细微的差别。

例如,此代码:

addBooks(() => console.log(1));
console.log(2);

...将记录

2
1个

...如果您进行了ajax调用,但是

1个
2

...如果您返回了已解决的承诺。

来自https://api.jquery.com/jquery.when/

如果您不传递任何参数,jQuery.when()将返回已解决的Promise。

例如

if (books <= 0) return $.when();

并且,如果您需要传递未定义的值:

如果将单个参数传递给jQuery.when(),而不是Deferred或Promise,它将被视为已解析的Deferred,任何附加的doneCallbacks都将立即执行。doneCallbacks传递给原始参数。

例如,传递一个空数组:

if (books <= 0) return $.when([]);

例如,传递了一个空对象:

if (books <= 0) return $.when({});
本文地址:http://jquery.askforanswer.com/tuikongchengnuo.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!