javascript - 如何从 JavaScript 函数返回 promise ?

标签 javascript jquery promise jquery-deferred deferred

假设我有 XYZ 函数,所有函数都返回 Promise 并准备好链接。我想做的是在完成后通知进度并处理错误。写什么比较好以及为什么(会产生什么后果):

A.

function my_func(index, size){
    return X
        .then(Y)
        .then(Z)
        .then(
           function(data){
               var dfd = new $.Deferred();
               dfd.notify("progress", index / size, 'OK');
               dfd.resolve(data);
               return dfd.promise();
           },
           function(){
               return handleError(arguments, size, index);
           }
        );
}

B.

function my_func(index, size){
    var dfd = new $.Deferred();
    X
    .then(Y)
    .then(Z)
    .then(
        function(data){
            dfd.notify("progress", index / size, 'OK');
            dfd.resolve(data);
        },
        function(){
            return handleError(arguments, size, index);
        }
    )
    return dfd.promise();
}

另外,有什么区别:

X.then(Y).then(Z);

和:

$.when(X).then(Y).than(Z);

如果$.when部分是不必要的,为什么它存在于jQuery中?

最佳答案

后者是不必要的。这只是额外的粗俗。 $.when 对于将值转换为 Promise 和聚合非常有用。

这是一个平均 $.when 用例:

$.when($.get(...),$.get(...)).then(function(firstResult,secondResult){
     // access both results here
}); 

您可以在此处使用这两个结果,两者都已完成。

至于第一个问题 - 基本上是 B。第一个选项是 deferred anti pattern并且最好避免。请参阅link to it询问为什么。

关于javascript - 如何从 JavaScript 函数返回 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24672983/

相关文章:

javascript - 我怎样才能告诉正则表达式从字面上匹配相同的字符串?

javascript - 在当前页面上查找类并运行函数

javascript - Nodejs Promise 设计中的内存泄漏?

javascript - 在页面之间移动代码后,表排序器无法按预期工作

javascript - CSS 包含相对于 CSS 文件位置的图像

javascript - Vuex Action - 返回 Axios 返回错误

node.js - 如何与 forEach 同时执行 Promise?

javascript - 为 DataTables JQuery 插件创建自定义搜索框

javascript - Bootstrap : make expand/Collapsible table instead of div

javascript - 使用 fabricjs 将文本左、中、右对齐