我正在尝试从异步函数获取 http get 响应。但是,函数内的值正在显示,但返回值未定义。
即使承诺不是未定义的值
请找到下面的代码
'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);
}
);
Run Code Online (Sandbox Code Playgroud)
下面是日志
tt values undefined
response 64.945
Run Code Online (Sandbox Code Playgroud)
我会重写做这样的事情:
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);
});
Run Code Online (Sandbox Code Playgroud)
您还可以做一些更紧凑的事情:
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);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |