首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将承诺作为参数传递不会触发或失败回调

将承诺作为参数传递不会触发或失败回调
EN

Stack Overflow用户
提问于 2015-08-26 17:16:05
回答 1查看 201关注 0票数 0

即使我能够将允诺作为参数传递给错误函数,但它不会触发调用方的& error函数。?

如果我将代码更改为将AJAXError函数内联,那么一切都正常。

是否有可能将许诺作为参数传递,但仍然能够触发回退,并在链中的调用方失败。

注意:承诺从palletizerService.addSerialNumberToPallet返回,但在另一个函数AjaxFailed.中被解析/拒绝

代码语言:javascript
运行
复制
palletizerService.addSerialNumberToPallet ('p1','s1')
.then(  function (response){
    console.log('success');
},
function(error){
    console.error(error);
});

下面是我从上面的代码调用的服务

代码语言:javascript
运行
复制
palletizerService.addSerialNumberToPallet = function (palletID, serialNumber) {
var deferred = $q.defer();

$.ajax({
    url: url,
    type: "GET",
    dataType: "json",
    methodName: methodName,
    deferred: deferred.promise,
    data: "palletID=" + palletID + "&serialNumber=" + serialNumber, 
    timeout: 20000, // 20 seconds for getting result, otherwise error.
    error: AjaxFailed,
    complete: function (jqXHR, textStatus) {
        console.log("Ajax-finally : " + methodName);
    },
    beforeSend: function (qXHR, settings) {
    },
    success: function (data, textStatus, jqXHR) {
        console.log("Ajax-Sucess " + methodName);
        deferred.resolve(data);
    }
});

return deferred.promise;
};

这是外部函数

代码语言:javascript
运行
复制
function AjaxFailed(qXHR, textStatus, errorThrown) {

try {
    console.error('Ajax-Error in ' + methodName, qXHR.status, qXHR.responseText);

} catch (e) {
    console.log("LocalMethod-Error in " + methodName);
    console.error(e);
}
finally {
    this.deferred.reject(qXHR);
}

}
EN

回答 1

Stack Overflow用户

发布于 2015-08-26 18:07:38

您的问题是,您要将允诺作为options对象的.deferred属性传递。您无法解析/拒绝承诺,它们没有.reject方法(您的代码在尝试调用它时应该抛出)。相反,您需要传递您所持有的deferred对象。

不过,无论如何,这都是个坏主意。由于jQuery.ajax已经返回了一个承诺,所以您应该简单地使用$q.when同化它。

代码语言:javascript
运行
复制
function (palletID, serialNumber) {
    return $q.when($.ajax({
         …
    }));
}

(您将能够省略所有successerrror处理程序,角承诺确实会处理它们;如果您想要添加转换或日志记录,请执行承诺中的转换或日志记录)。

然而,这仍然不是最优的,事实上,几乎没有理由使用jQuery.ajax。只需使用角的 service,它也会立即返回一个角承诺。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32232782

复制
相关文章

相似问题

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