【发布时间】:2017-01-21 00:49:05
【问题描述】:
我有一个尝试操作数据库的 Meteor 方法,如果成功,则调用一个异步方法。我希望能够调用此方法并返回异步调用的结果或数据库操作的错误。
这是(大致)我在服务器上的代码:
Meteor.methods({
'data.update'(id, data) {
Collection.update({id_: id}, {$set: {data: data}}, error => {
if (error) {
// Have method return Meteor error for DB-failure
} else {
callAsync(id, (error, res) => {
if (error) {
// Have method return Meteor error for async call failure
} else {
// Have method return success(res)
}
})
}
})
}
});
我已阅读有关 Futures 和 Promises 的内容,但我对这些概念很陌生,我不确定何时使用什么。最好我正在寻找一种不依赖于 Meteor/ES6 之外的任何第三方库的解决方案。奖励(相关)问题:数据库操作后通常会返回什么,让我将回调附加到方法?
【问题讨论】:
-
期货和承诺没有区别(除了术语)?尽管在 JS 中我们称它们为“承诺”,是的,您应该返回一个。
-
正如我所说,我对这些概念很陌生。我知道在 Scala 中它们是不同但相关的概念,维基百科说“Futures 和 Promise 起源于函数式编程和相关范式(例如逻辑编程),以将值(未来)与其计算方式(承诺)解耦”。 JS 中的 future 和 promise 之间的一大区别是你只能对后者进行有意义的谷歌搜索;)。
-
是的,terminology 在 JS 中有点奇怪。我们谈论的是 deferred 和 promise 而不是 promise 和 future,而且无论如何,deferred 正被逐步淘汰,取而代之的是纯回调。
-
我明白了:)。无论如何,如果你对在这种情况下我应该如何使用 Promise 有一个很好的答案,请随时写一个答案,我会接受它。
-
我不太了解meteor,所以这里恐怕帮不了你。
标签: javascript meteor ecmascript-6