繁体   English   中英

如何从JavaScript函数返回一个promise?

[英]How to return a promise from JavaScript function?

想象一下,我有XYZ功能,所有返回的承诺和准备连锁。 我想要做的是在完成后通知进度并处理错误。 什么是更好的写作和为什么(后果是什么):

一种。

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 .when部分是不必要的,为什么它存在于jQuery中呢?

后者是不必要的。 这只是额外的残余。 $.when用于将值转换为promises和聚合。

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

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

你可以在这里使用两个结果,两个都已完成。

至于第一个问题 - 基本上B.第一个选项是延迟反模式 ,更好地避免。 请参阅有关原因的链接

主要的区别是,你是依靠X是有方法的对象then 将非延迟/ promise对象传递给$.when会将其视为已解决的Deferred ,我个人更喜欢这样做,因为它会使函数之间的耦合更松散。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM