【问题标题】:Nodejs loop through response data from requestNodejs 循环遍历请求中的响应数据
【发布时间】:2016-10-24 11:04:53
【问题描述】:

以下数据是从request() 库返回的。

var data = [{
    service: "trains",
    ...
}, {
    service: "buses",
    ...
}]

我在 NodeJS 应用程序上有以下代码。

request(options)
.then(data => {
    data.forEach(record => {
        if (record.service !== 'buses') {
            return next('You do not have permission to access buses.')
        }
        return next()
    })
})
.catch(err => next(err))

所以当这段代码在 Node 上运行时,它总是评估为 false?这对我来说很奇怪,因为在没有请求的情况下运行它并且直接使用原始响应似乎可以正常工作?我猜这是异步行为的问题?

【问题讨论】:

  • 似乎下一个方法被调用不止一个。究竟是什么评估为假?
  • 是的,评估结果为假。此外,如果你想遍历每个元素,你为什么要 return next()
  • 您也可以使用 Array.some 方法避免 forEach 循环。一个可能的解决方法: request(options).then(data=>data.some() ? next('error') : next()).catch(...)
  • 看来您要返回下一个继续下一个。那么,不是吗?这将使您返回权限错误,甚至不检查“总线”服务。你到底想通过这个承诺来实现什么?
  • 抱歉,数据来自我正在检查以确保总线服务存在的用户 ID。否则,它们是被禁止的。

标签: node.js loops asynchronous


【解决方案1】:

您正在遍历数组的所有元素,因此如果第一个元素与“总线”不匹配,则会导致“您无权访问总线”。

我认为您正在寻找的是一种检查数组中是否存在元素的方法。在您的情况下,类似于Array.filter:

.then(data => {
    if (data.filter(el => el.service === 'buses').length === 0) {
        return next('You do not have permission to access buses.');
    }
    return next();
})

【讨论】:

    猜你喜欢
    • 2011-01-29
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多