请求未返回正确值的Javascript函数
我现在正在使用请求未返回正确值的Javascript函数,javascript,node.js,request,Javascript,Node.js,Request,我现在正在使用请求节点包制作一个节点应用程序,以连接到API。但是,当我发出API请求时,用于确定用户名和密码有效性的函数不会按预期返回true 以下是我目前的代码: const request = require("request") const API_URL = <the_api_url> const isValidLogin = (username, password) => { let success = false; let options = {
请求
节点包制作一个节点应用程序,以连接到API。但是,当我发出API请求时,用于确定用户名
和密码
有效性的函数不会按预期返回true
以下是我目前的代码:
const request = require("request")
const API_URL = <the_api_url>
const isValidLogin = (username, password) => {
let success = false;
let options = {
url: API_URL,
method: 'GET',
auth: {
user: username,
pass: password
}
}
request(options, (error, response, body) => {
console.log(response.statusCode);
if (error) {
console.log(error)
}
if (response.statusCode == 200) {
success = true;
}
else {
success = false
}
})
console.log(success)
return success;
}
const request=require(“请求”)
常量API_URL=
常量isValidLogin=(用户名、密码)=>{
让成功=虚假;
让选项={
url:API_url,
方法:“GET”,
认证:{
用户:用户名,
密码
}
}
请求(选项,(错误、响应、正文)=>{
console.log(响应.状态码);
如果(错误){
console.log(错误)
}
如果(response.statusCode==200){
成功=真实;
}
否则{
成功=错误
}
})
console.log(成功)
回归成功;
}
当我将无效的用户名
和密码
传递到isValidLogin()
时,它正确地返回false。我注意到响应。statusCode
是200
,这意味着success
是true
,但是它没有按预期工作。request()
函数是异步的,这基本上意味着request()
函数调用的结果将在将来返回。对于此request()
方法,结果将在将来通过回调返回(即您正在测试statusCode
)
要根据对request()
的调用正确返回success
结果,您需要执行以下两项操作之一:
isValidLogin()
定义为异步函数/返回将来解决的承诺:isValidLogin
,在request()完成后,通过success
结果调用该回调:
request
是异步的-因此,在回调中填充它之前,您将返回success
/* Add asnyc means this function is now asynchronous */
const isValidLogin = async (username, password) => {
let success = false;
let options = {
url: API_URL,
method: 'GET',
auth: {
user: username,
pass: password
}
}
/* return the result of the request when the request
has completed */
return await (new Promise(resolve, reject) => {
request(options, (error, response, body) => {
if (response.statusCode == 200) {
resolve(true);
}
else {
resolve(false);
}
});
});
}
/* Requires the surrounding function to be async */
const success = await isValidLogin('john', 'password');
/* onComplete is the added callback that is fired when request() completes */
const isValidLogin = (username, password, onComplete) => {
let success = false;
let options = {
url: API_URL,
method: 'GET',
auth: {
user: username,
pass: password
}
}
request(options, (error, response, body) => {
console.log(response.statusCode);
if (error) {
console.log(error)
}
if (response.statusCode == 200) {
onComplete(true);
}
else {
onComplete(false)
}
});
}
/* Usage example */
isValidLogin('john', 'password', (success) => {
console.log(`the request completed in the future
and the result was ${success}`)
})