【发布时间】:2018-04-01 05:19:04
【问题描述】:
我有一个 subreddit,我想在其中解析所有日常线程的 cmets。为此,我必须获取线程 ID。我使用 snoowrap 作为 api 包装器。
我很难理解节点的异步特性。当我打电话给subreddit.search({query: 'Daily General Discussion - ' + date}) 时,我得到了一个 Promise。
然后我解决了获取线程 ID 并将其推送到新数组的承诺(我尝试使用 arr[i] = a[0].id 保存值,但只有最后一个结果存储在我的数组中,这表明 Promise.resolve 被调用在我的 for 循环之后)。
如何在 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() -
The code below works, I just want to avoid using setTimeout.- 等待承诺解决 -
@JaromandaX 但是,如果我想使用数组中的值进行更多计算,如何确保在执行更多代码之前解决承诺?
-
您等待使用
Promise.all(promises).then(results => { here the results are yours to play with })解决的承诺
标签: javascript node.js promise