1

我有一些代码,JSON.stringify 是一个对象数组,如下所示:

const postsCommentsReadyForDB = postsComments.map(postComments => ({
  id: getPostId(postComments),
  comments: JSON.stringify(getComments(postComments)),
}))

但是,对于非常大量的数据(例如,包含 6000 多个对象的数组),由于所有 JSON.stringify 处理,可能需要 3 秒以上才能完成。

我并不担心执行此操作所需的时间,但我想避免阻塞事件循环或任何 I/O,所以我想我也许可以使用 setImmediate 来解决这个问题。

这是我使用 setImmediate 执行此操作的方法:

const postsCommentsReadyForDB = []

postsComments.forEach(postComments => {
  setImmediate(_ => {
    postsCommentsReadyForDB.push({
      id: getPostId(postComments),
      comments: JSON.stringify(getComments(postComments)),
    })
  })
})

但是,当我运行它时,它似乎不起作用,并且 postsCommentsReadyForDB 是空的。

在这种情况下可以使用 setImmediate 吗?

4

1 回答 1

0

根据 Bergi 的建议,这种方法似乎有效:

const util = require('util')
const setImmediatePromise = util.promisify(setImmediate)


async function foo(){

  const postsCommentsReadyForDB = []

  for (const postComments of postsComments) {

    await setImmediatePromise()

    postsCommentsReadyForDB.push({
      id: getPostId(postComments),
      comments: JSON.stringify(getComments(postComments)),
    })
  }

}

foo().catch(err => console.error(err))
于 2021-04-16T09:32:33.783 回答