Promises 和 Meteor.call()

maa*_*sha 1 javascript meteor

我有一个Meteor.method()服务器端从oracledb. 客户端我有:

Meteor.call('myMethod', (error, result) => {
  result.then() // err -> no .then() method?, 
});
Run Code Online (Sandbox Code Playgroud)

那么什么是result?它没有.then()方法,所以它不是一个承诺?

Mas*_*rAM 5

Meteor 不会将承诺“发送”给客户端。

一旦承诺在服务器上被解析(或拒绝),服务器就会向客户端返回一个结果值(触发回调),而不是从方法本身返回承诺的那一刻(除非它在返回时已经解决) .

您还可以使用 async/await 来简化代码。

这是一篇博客文章,其中包含有关在方法中使用异步代码的更多详细信息。

笔记:

从服务器发送的值使用 EJSON 进行序列化。除非您创建自定义序列化程序,否则对象方法、getter 等将从其中剥离。在某些情况下,序列化甚至可能会失败(我认为它发生在某些moment对象上)并导致undefined返回。