YouTube IDを入力する簡単なフィールドがあります。私はあなたのYouTubeのクリップのタイトルを取得するには、renaldoのYouTubeのAPI(https://atmospherejs.com/renaldo/youtube-api)を使用しています。なぜ私のMeteor.methodは未定義に戻りますか?
クライアントサイドイベントは、トラックID(var tid)値をメソッド 'addTrack'に正常に渡します。トラックのタイトルがサーバーのコンソールに出力されます。私は本当に悪い時を何かをすべてクライアントに戻しています。
私は 'addTrack'メソッドから 'getVideoData'メソッドを呼び出すと、毎回 'undefined'が返されます。私は流星やジャバスクリプトの専門家ではない、これは私がそれの地獄のために学んでいるものです。
私はコールバックの概念とjavascriptの同期性を理解しています(私は思っています!)。
ありがとうございました。
[EDIT以下のコードは、将来の使用、私の問題を解決する]
if (Meteor.isServer) {
YoutubeApi.authenticate({
type: 'key',
key: API_KEY
});
Meteor.methods({
addTrack: function(tid) {
Meteor.call("getVideoData", tid, function(err,res) {
console.log(res);
});
},
getVideoData: function(tid) {
var future = new Future();
YoutubeApi.videos.list({
part: "snippet",
id: tid,
}, function (err,data) {
var _data = {"title":data.items[0].snippet.title,"desc":data.items[0].snippet.description};
future["return"](_data)
});
return future.wait();
}
Meteor.startup(関数(){ 未来= Npm.require( '繊維/未来');
} ); }
これはいくつかの可能な解決策を持つ非常に一般的な流星の質問です。基本的な問題は、メソッドが非同期関数を呼び出すことです。 –
他のメソッドからメソッドgetVideoDataを呼び出す方法、Meteor.call( "getVideoData")を使用していますか? – Zafta
はい、私はMeteor.call( "getVideoData")経由で別のメソッドからメソッドを呼び出していますが、まだ定義されていません。 – rick