我有一個subreddit我想解析所有日常線程的評論。要做到這一點,我必須得到線程ID。我使用snoowrap作爲api包裝。如何避免使用setTimeout等待Promise解決?
我在包裝節點的異步性質方面遇到困難。當我打電話給subreddit.search({query: 'Daily General Discussion - ' + date})
時,我得到了一個承諾。
然後我解決承諾獲取線程ID並將其推送到一個新的數組(我試着用arr[i] = a[0].id
保存值,但只有最後的結果存儲在我的數組中,這表明Promise.resolve被調用後我的循環)。
如何在Promise解決之前停止執行其餘代碼?由於解析時間可能比我的setTimeout時間長,因此使用setTimeout似乎效率低下且不可靠。
下面的代碼工作,我只是想避免使用setTimeout。
const subreddit = reddit.getSubreddit('subreddit')
let numberOfDaysBack = 50;
let arrIds = new Array(0);
for (var i = 0; i < numberOfDaysBack; i++) {
let date = moment().subtract(0+i, 'days').format('MMMM D, YYYY')
let dailyThread = subreddit.search({query: 'Daily General Discussion - ' + date})
Promise.resolve(dailyThread).then(a=>{
arrIds.push(a[0].id)
})
}
setTimeout(function(){
console.log(arrIds)
},1000)
doOtherStuff(arrIds)
@PatrickEvans你能明確地與我和我的例子拼出來?我正在使用'Promise.resolve()。then()' – Huy
'下面的代碼工作,我只是想避免使用setTimeout.' - 等待承諾解決 –
@JaromandaX但是,如果我想使用值該數組爲更多的計算,我如何確保承諾在我執行更多代碼之前得到解決? – Huy