私は間違いなくまっすぐに見えていないので、素早く手を探しています。私はグーグル・グーグルで、助けてくれたものはあまり見つからなかった。ノードjsの非同期スコープからの値を返す
は、シーンを設定します。
私は「googleapis」パッケージを使用するノードのアプリを持っています。今、私は正常に動作し、期待通りにデータを(ほとんど)返します。
問題は、各ビデオの再生時間を取得するために別々の呼び出しを行う必要があるときです(データのビットを別の呼び出しで取得する唯一の方法)。
期間の値をスコープの上に渡すことができないようです。私はそれを正しくやっていないと知っていると違うことをする必要があるが、私はここで木の木を見ることができません。
youtubeClient.search.list({ part: 'id,snippet', maxResults: 10, q: searchTerm, type: 'video' },
function (err, data) {
if (err) {
console.error('Error: ' + err);
}
if (data) {
var returnList = [];
for (var item in data.items) {
var duration = '00:00'; // THIS IS THE VARIABLE I WANT POPULATED
var value = data.items[item].id.videoId;
youtubeClient.videos.list({ part: 'contentDetails', id: data.items[item].id.videoId },
function (err, details) {
if (err) {
console.error('Error: ' + err);
}
if (details) {
// THIS IS WHERE I AM TRYING TO SET THE DURATION FIELD FROM THE RESULT
duration = details.items[0].contentDetails.duration;
}
});
returnList.push({value: value, duration: duration});
}
res.json(returnList);
}
});
あなたが見ることができるように、私は何を達成しようとしていることは全く難しいことではありませんので、任意の助けいただければ幸いです。ありがとうございました。
これは、ループ問題内側古典***非同期操作です*** 。最初の非同期操作が終了してコールバックを呼び出す前に、ループは完了まで実行され、すべてのタイミングを混乱させます。コードが機能しない理由を理解するためにいくつかの検索を行うことをお勧めします。残念ながら、私は、これらのタイプの質問すべての参照として使用できる良い標準的な答えはないと思います。 – jfriend00
https://www.npmjs.com/package/async – afuous
まさにjfriend00のような気分でした。それはちょっと残念ですが、もう少し調べてみましょう – Roooss