meteor.call与回调返回undefined

时间:2017-11-04 21:20:13

标签: javascript meteor

我很欣赏这方面有很多问题,但我似乎无法找到相关的答案。

我正在使用Meteor调用来回调服务器上通过bitly缩小URL的方法,但是虽然这在服务器上运行,但我在客户端上得到了一个未定义的响应。

这里的任何想法都是代码吗?

客户端

Meteor.call('bitlyShrink','http://test.com', function(error, response) {
  console.log(error);
  console.log(response);
})

服务器

Meteor.methods({
  bitlyShrink(longurl) {
    check (longurl, String);

    const BitlyClient = require('bitly'),
          bitly = BitlyClient('token');

    bitly.shorten( longurl )
         .then( function ( response ) {
           console.log(response);
           return response;
         })
         .catch( (error ) => {
           return error;
         });
  }
});

1 个答案:

答案 0 :(得分:2)

这是在Meteor方法中使用Promise时常犯的错误。

要让Meteor解析Promise并将结果返回给客户端,您应该在此方法结束时返回Promise:

Meteor.methods({
  bitlyShrink(longurl) {
    check (longurl, String);

    const BitlyClient = require('bitly'),
          bitly = BitlyClient('token');

    const bitlyPromise = bitly.shorten(longurl);
    // do something else, if needed
    return bitlyPromise;
  }
});

您不应添加.catch(),它将自动添加到Meteor中。

有用的文章:Using Promises and async/await in Meteor