Nodej循环来自请求

时间:2016-06-22 13:13:29

标签: node.js loops asynchronous

以下数据是从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?这对我来说很奇怪,因为在没有请求的情况下运行它并直接使用原始响应似乎工作正常?我想这是异步行为的问题?

1 个答案:

答案 0 :(得分:3)

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

我认为您正在寻找的是检查数组中是否存在元素的方法。在你的情况下,像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();
})