首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JQuery延迟拒绝立即

JQuery延迟拒绝立即
EN

Stack Overflow用户
提问于 2014-02-02 10:03:31
回答 2查看 8.5K关注 0票数 9

当使用JQuery.Deferred时,直接调用reject()可以吗?而没有调用异步函数?

也许我希望在异步函数的开头进行某种测试。如果测试失败,我想立即拒绝。请参见下面的第一个if块。

代码语言:javascript
运行
复制
function doSomethingAsync() {

    //Test if the ajax call should be invoked
    var testFailed = true;

    var dfd = $.Deferred();

    //Check if test failed
    if (testFailed) {
        var asyncResult = {
            success: false,
            data: 'test failed'
        };

        //Is this OK usage of reject on the same thread?
        dfd.reject(asyncResult);

        return dfd.promise();
    }


    $.get('/api/testapi/get').done(function (data) {
        var asyncResult = {
            success: true,
            data: data
        };

        dfd.resolve(asyncResult);
    }).fail(function (err) {
        var asyncResult = {
            success: false,
            data: err
        };

        dfd.reject(asyncResult);
    });

    return dfd.promise();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-02 15:12:42

当使用JQuery.Deferred时,直接调用reject()可以吗?而没有调用异步函数?

是的,返回一个已经被拒绝的承诺和立即拒绝延期是完全可以的。您可能只需要验证您的回调不依赖异步解析,而jQuery并不保证这一点(与A+实现相反)。

注意,在您的代码中,您应该使用then,而不是手动解析延迟的:

代码语言:javascript
运行
复制
function doSomethingAsync() {

    var testFailed = /* Test if the ajax call should be invoked */;

    var dfd = testFailed 
          ? $.Deferred().reject('test failed')
          : $.get('/api/testapi/get');

    return dfd.then(function (data) {
        return {
            success: true,
            data: data
        };
    }, function (err) {
        return {
            success: false,
            data: err
        };
    });
}
票数 12
EN

Stack Overflow用户

发布于 2019-10-09 10:16:29

您可以快速完成此操作,因为您的函数返回了一个诺言对象:

代码语言:javascript
运行
复制
return Promise.reject('test failed');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21509278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档