相关疑难解决方法(0)

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

function getStuffDone(param) {           | function getStuffDone(param) {
    var d = Q.defer(); /* or $q.defer */ |     return new Promise(function(resolve, reject) {
    // or = new $.Deferred() etc.        |     // using a promise constructor
    myPromiseFn(param+1)                 |         myPromiseFn(param+1)
    .then(function(val) { /* or .done */ |         .then(function(val) {
        d.resolve(val);                  |             resolve(val);
    }).catch(function(err) { /* .fail */ |         }).catch(function(err) {
        d.reject(err);                   |             reject(err);
    });                                  |         });
    return d.promise; /* or promise() */ |     });
}                                        | }
Run Code Online (Sandbox Code Playgroud)

有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

479
推荐指数
3
解决办法
7万
查看次数

在客户端上使用多个Meteor Method调用避免回调地狱

我有多个Meteor.calls,其中每个方法都取决于另一个Meteor方法的响应.

客户

Meteor.call('methodOne', function(err, resOne){
    if(!err){
        Meteor.call('methodTwo', resOne, function(err, resTwo){
            if(!err){
                Meteor.call('methodThree', resTwo, function(err, resThree){
                    if(err){
                        console.log(err);
                    }
                })
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

从Meteor的文档我知道

"调用客户端的方法是异步运行的,所以你需要传递一个回调来观察调用的结果."

我知道我可以在服务器上创建另一个Meteor方法来执行方法'methodOne','MethodTwo','MethodThree'使用Meteor.async包装,或者顺序没有回调.但是我担心这条路会导致我的流星方法变得臃肿和纠结,导致意大利面条代码.我宁愿保持每个Meteor方法只需要做一个工作,并找到一种更优雅的方式来链接客户端上的调用.任何想法,有没有办法在客户端使用Promises?

javascript asynchronous promise meteor

8
推荐指数
1
解决办法
3038
查看次数

标签 统计

javascript ×2

promise ×2

asynchronous ×1

bluebird ×1

es6-promise ×1

meteor ×1

q ×1