我有Meteor.method()
服务器端从oracledb
返回一个承诺。客户方我有:
Meteor.call('myMethod', (error, result) => {
result.then() // err -> no .then() method?,
});
那么result
是什么?它没有.then()
方法,所以它不是一个承诺?
答案 0 :(得分:3)
流星没有"发送"对客户的承诺。
一旦服务器上的promise被解析(或拒绝),服务器就会将结果值返回给客户端(触发回调),而不是从方法本身返回promise(除非它已经解决)什么时候回来)。
您还可以使用async / await来简化代码。
以下是a blog post,其中详细介绍了在方法中使用异步代码。
注意:强>
使用EJSON序列化从服务器发送的值。除非您创建custom serializer,否则将从中删除对象方法,getter等。在某些情况下,序列化甚至可能会失败(我认为它发生在某些moment
个对象上)并导致返回undefined
。
答案 1 :(得分:1)
Meteor默认不使用promises,但是,你可以将Meteor.calls包装成一个promise函数,如下所示
const callWithPromise = (method, myParameters) => {
return new Promise((resolve, reject) => {
Meteor.call(method, myParameters, (err, res) => {
if (err) reject('Something went wrong');
resolve(res);
});
});
}
(async function() {
const myValue1 = await callWithPromise('myMethod1', someParameters);
const myValue2 = await callWithPromise('myMethod2', myValue1);
})();
示例代码已从Meteor forum复制。
此外,this topic可让您更好地了解Aysnc / Await语法或Meteor调用中的Promises。