编程语言
首页 > 编程语言> > javascript-如何使用Promise和Node.js正确检查和记录HTTP状态代码?

javascript-如何使用Promise和Node.js正确检查和记录HTTP状态代码?

作者:互联网

我是JavaScript的新手,并且是node.js框架的新手,几天前才开始使用它.我很抱歉,如果我的代码是荒谬的,promise和callback的整个思想仍然沉没.话虽如此,我的问题是,我试图根据对网站的范围来确定对网站的某些请求是否成功或导致错误他们的状态码响应.我正在与一系列网站合作,到目前为止,下面是我做的事,但是我得到了TypeError:安装了node.js的本地计算机上无法读取未定义的属性’then’,无法找出原因.

const sample = [
    'http://www.google.com/',
    'http://www.spotify.com/us/',
    'http://twitter.com/',
    'http://google.com/nothing'
]

const http = require('http')

const getStatusCodeResult = (website) => {

    http.get(website, (res) => {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                let statusCode = res.statusCode
                error = statusCode >= 400 && statusCode <= 500 ? `error: ${website}`: null
                if (error) {
                    reject(error)
                    
                } else if (statusCode >= 200 && statusCode <= 300) {
                    resolve(`Success: ${website}`)
                }
            }, 0)
        })
    })
}
// LOOP PROMISES
const getAllStatusCodeResult = (websites) => {
    websites.forEach((website) => {
        getStatusCodeResult(website)
            .then((result) => {
                console.log(result)
            })
            .catch(error => {
                console.log('error', error)
            })
    })
}
getAllStatusCodeResult(sample)

理想情况下,我希望将结果打印为以下示例,但现在我仅使用console.log来确定代码是否有效.

   // Example Printout
   {
      success: ['https://www.google.com/', 'https://www.spotify.com/us/', 
      'https://twitter.com /' ],
      error: [''http://google.com/nothing']
   } 

解决方法:

您混合了前两行.为您提供要返回的值的新Promise包装器必须位于外部,并且http.get调用应位于其executor回调内部.另外,您实际上并不需要超时:

function getStatusCodeResult(website) {
    return new Promise((resolve, reject) => {
        http.get(website, (res) => {
            let statusCode = res.statusCode,
                error = statusCode >= 400 && statusCode <= 500 ? `error: ${website}`: null
            if (error) {
                reject(error)
            } else if (statusCode >= 200 && statusCode <= 300) {
                resolve(`Success: ${website}`)
            }
        })
    })
}

标签:javascript,node-js,promise,es6-promise,callback
来源: https://codeday.me/bug/20191012/1898945.html