2017-11-04 1 views
0

これに多くの質問があることを感謝しますが、私は関連する回答を見つけることができません。コールバックが返されていないmeteor.call

bitlyを介してURLを縮小するサーバー上のメソッドへのコールバックでMeteorコールを使用していますが、これはサーバー上で実行されますが、クライアントで未定義の応答が返されています。

ここのアイデアはコードですか?流星の方法で約束を使用している間に行われた一般的な間違いだ

クライアント

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; 
     }); 
    } 
}); 

答えて

2

。流星は約束を解決し、あなたがこの方法の終わりに約束を返す必要があり、クライアントに結果を返すようにするに

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()を追加してはいけません、それは自動的に流星によって追加されます。

有用な記事:Using Promises and async/await in Meteor

+0

ありがとうございます@Styx。パーフェクトです! –

+0

@NickWild私の答えを受け入れることを忘れないでください:) – Styx

+0

申し訳ありませんが、私は持っていたと思った。 :-) –

関連する問題