我一直试图避免在Meteor中回调地狱,但首先,我会解释我的问题:
我在服务器中声明了一些Meteor方法,并且我在客户端使用Meteor.call调用它们,但主要的问题是我有大量的回调使调试成为一项非常困难的任务(并且还有manteinance ...)。如果我使用“小”项目,这不会是一个问题,但我正在构建一个大项目,我正在计划使用promises,但令我惊讶的是......由于Meteor.call只接受回调,因此无法正常工作。
我在这里和Meteor论坛上看了很多帖子,但没有一个可以帮助我......有什么解决方法吗? (我试过deanius:承诺包,它仍然是相同的...)
编辑:使用Meteor 1.4.2
答案 0 :(得分:1)
您可以使用bluebird
模块。 promisifyAll
允许您将对象上的所有函数转换为使用promises而不是回调,因此您可以使用Meteor.call
作为答案,而不是使用Meteor.callAsync
作为答案。
使用回调:
Meteor.call(..., function(...) {
// ...
});
承诺:
Meteor.callAsync(...).then(function(...) {
// ...
});
答案 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);
}