node.js - Nodejs请求功能仍未完成但代码继续下一步?
问题描述
nodejs 有点新,我似乎无法让我的回调函数工作。现在我的函数只想检查 URL 是否存在
const request = require('request')
const URL = 'http://sampleurl.com'
var urlexists = false
async _urlExists(URL){
request(url, function (error, response, body) {
if (!error && response.statusCode.toString()[0] === '2'){
urlexists = true
} else {
throw new Error(`url is not working: ${URL}`)
}
})
}
问题是,我的代码继续执行下一个,意思是result is passed,但几秒钟后,控制台显示错误提示url is not working: ${URL}。
基本上我只是打电话
await this._urlExists(URL)
解决方案
该_urlExists
函数在调用后立即返回request
,然后等待响应。该_urlExists
函数需要返回一个 Promise 以便调用者知道数据何时准备就绪。
我查找了您正在使用的npm 包,如果不使用wrapper 包request
,它不支持 Promises 。request-promise-native
但是,您仍然可以将request
调用包装在 Promise 中:
async _urlExists(URL) {
return new Promise((resolve, reject) => {
request(url, function (error, response, body) {
if (!error && response.statusCode.toString()[0] === '2'){
urlexists = true;
resolve(true);
} else {
reject(`url is not working: ${URL}`);
}
});
});
}
现在,当您调用 时await this._urlExists
,该函数将暂停以等待resolve
orreject
响应,然后再继续。要从可能reject
的调用中捕获错误,请将调用包装_urlExists
在一个try-catch
块中。
还要确保您正在调用的函数await this._urlExists
声明为async
,因为await
关键字只能在async
.
如果您在实施我的解决方案时遇到任何问题或疑问,请在评论中告诉我。
推荐阅读
- excel - VBA Excel - 根据用户输入使用 xlFilterAllDatesInPeriod"Month"
- amazon-web-services - 什么是 IAM 用户属性?
- java - 有什么方法可以追踪或监听用户点击浏览器中的任何链接,或者任何聊天信使应用程序甚至短信?
- excel - 用 VB.net 中的 excel 中的数据和特定值计算行数
- reactjs - 类型'{孩子:无效;标头:字符串;键:字符串;}' 不可分配给类型 'Readonly<{ children?: ReactNode; }>'
- java - 仅在选择时设置 Jtable 单元格可编辑
- javascript - 如何使用表格中的每个表格?要求在一个表格中插入多个提交按钮
- php - 计算总和值jQuery PHP
- python - 在 dict 中使用 if else 来使用 Python 将值设置为键
- python - 无法使用python通过串口读取数据