0
我絕對沒有看到這個直線,所以我正在尋找一個快速的手。我一直在使用Google,並沒有發現有什麼幫助。從節點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