避免回调地狱。 Meteor.call承诺

时间:2016-11-09 09:30:01

标签: javascript meteor promise

我一直试图避免在Meteor中回调地狱,但首先,我会解释我的问题:

我在服务器中声明了一些Meteor方法,并且我在客户端使用Meteor.call调用它们,但主要的问题是我有大量的回调使调试成为一项非常困难的任务(并且还有manteinance ...)。如果我使用“小”项目,这不会是一个问题,但我正在构建一个大项目,我正在计划使用promises,但令我惊讶的是......由于Meteor.call只接受回调,因此无法正常工作。

我在这里和Meteor论坛上看了很多帖子,但没有一个可以帮助我......有什么解决方法吗? (我试过deanius:承诺包,它仍然是相同的...)

编辑:使用Meteor 1.4.2

3 个答案:

答案 0 :(得分:1)

您可以使用bluebird模块。 promisifyAll允许您将对象上的所有函数转换为使用promises而不是回调,因此您可以使用Meteor.call作为答案,而不是使用Meteor.callAsync作为答案。

使用回调:

Meteor.call(..., function(...) {
    // ...
});

承诺:

Meteor.callAsync(...).then(function(...) {
    // ...
});

floatdouble.cpp

答案 1 :(得分:0)

像AsyncJS https://github.com/caolan/async这样的图书馆是对厄运的回调金字塔的一般回答"问题

基本上是替换呼叫,如

Do.Something(1, function(result) {
    Do.SomethingElse(2, function(result) {
       Do.YetSomethingElse(3, function(result) {
           .... 
       })
    })
})

asyncjs.series([
    function F1(callback) {
       Do.Something(1, callback);  
    },
    function F1(callback) {
       Do.SomethingElse(2, callback);  
    },
    ..... etc
])

答案 2 :(得分:0)

现在ES7 Async / Await可以帮助解决问题"回调问题"。请在此处详细解释:http://rossboucher.com/await/#/10

async function () {
    let result1 = await Do.Something(1);
    let result2 = await Do.Something(2);
}
相关问题