来自 http 的节点 js 未定义值 return 获取异步函数
node js undefined value return from http get async function
我正在尝试从异步 function.However 中获取 http get 响应,函数值正在显示,但 return 值未定义。
Even promise not undefined values
请在下面找到代码
'use strict';
const express = require('express');
var request = require('request');
var https = require('https');
async function getCurrencies() {
let response;
try {
var getOptions = {
url: 'http://localhost:3000/api/currency',
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
json:true
};
await request(getOptions, function (err, res, body) {
if (res && (res.statusCode === 200 || res.statusCode === 201)) {
console.log(' response ', res.body.rates.INR);
return res.body;
} else {
console.log('error body ', body);
}
});
} catch (error) {
console.log(" error pulling ", error);
process.exit();
}
}
var tt = getCurrencies().then(function(value) {
console.log(' tt values ',value);
}
);
下面是日志
tt values undefined
response 64.945
request
module/function 没有 return Promise
,所以你不能使用 await
。您有两个选择:
- 使用标准节点回调模式,或者
- 切换到例如
request-promise-native
模块如果你坚持使用async/await
模式
我会重写做这样的事情:
function getCurrencies() {
return new Promise((resolve, reject) => {
try {
var getOptions = {
url: 'http://localhost:3000/api/currency',
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
json:true
};
request(getOptions, function (err, res, body) {
if (res && (res.statusCode === 200 || res.statusCode === 201)) {
console.log(' response ', res.body.rates.INR);
resolve(res.body);
} else {
console.log('error body ', body);
reject(new Error('Error body: ' + JSON.stringify(body)));
}
});
} catch (error) {
console.log(" error pulling ", error);
process.exit();
}
});
}
getCurrencies().then(function(value) {
console.log(' tt values ',value);
});
你也可以做一些更紧凑的事情:
const rp = require('request-promise');
function getCurrencies() {
var getOptions = {
url: 'http://localhost:3000/api/currency',
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
json:true,
resolveWithFullResponse: true
};
return rp(getOptions).then((response) => {
return response.body;
});
}
getCurrencies().then(function(value) {
console.log(' tt values ',value);
}).catch ((err) => {
console.error('An error happened: ' + err);
});
我正在尝试从异步 function.However 中获取 http get 响应,函数值正在显示,但 return 值未定义。
Even promise not undefined values
请在下面找到代码
'use strict';
const express = require('express');
var request = require('request');
var https = require('https');
async function getCurrencies() {
let response;
try {
var getOptions = {
url: 'http://localhost:3000/api/currency',
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
json:true
};
await request(getOptions, function (err, res, body) {
if (res && (res.statusCode === 200 || res.statusCode === 201)) {
console.log(' response ', res.body.rates.INR);
return res.body;
} else {
console.log('error body ', body);
}
});
} catch (error) {
console.log(" error pulling ", error);
process.exit();
}
}
var tt = getCurrencies().then(function(value) {
console.log(' tt values ',value);
}
);
下面是日志
tt values undefined
response 64.945
request
module/function 没有 return Promise
,所以你不能使用 await
。您有两个选择:
- 使用标准节点回调模式,或者
- 切换到例如
request-promise-native
模块如果你坚持使用async/await
模式
我会重写做这样的事情:
function getCurrencies() {
return new Promise((resolve, reject) => {
try {
var getOptions = {
url: 'http://localhost:3000/api/currency',
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
json:true
};
request(getOptions, function (err, res, body) {
if (res && (res.statusCode === 200 || res.statusCode === 201)) {
console.log(' response ', res.body.rates.INR);
resolve(res.body);
} else {
console.log('error body ', body);
reject(new Error('Error body: ' + JSON.stringify(body)));
}
});
} catch (error) {
console.log(" error pulling ", error);
process.exit();
}
});
}
getCurrencies().then(function(value) {
console.log(' tt values ',value);
});
你也可以做一些更紧凑的事情:
const rp = require('request-promise');
function getCurrencies() {
var getOptions = {
url: 'http://localhost:3000/api/currency',
method: 'GET',
headers: {
'Content-Type': 'application/json'
},
json:true,
resolveWithFullResponse: true
};
return rp(getOptions).then((response) => {
return response.body;
});
}
getCurrencies().then(function(value) {
console.log(' tt values ',value);
}).catch ((err) => {
console.error('An error happened: ' + err);
});