简而言之,我有2个函数A,B
A是一个异步函数,需要一些时间来请求某些内容,然后准备好响应以返回
B从A获得输出
这是我的密码
async function A()
{
axios.get('API_ENDPOINT_URL').then(async function (rates) {
return new Promise((resolve , reject) => {
resolve(rates.data.data);
});
});
}
async function B(id)
{
var results = A();
console.log(results); // this output Promise { undefined }
}
如何解决此问题?
答案 0 :(得分:3)
var results = await A();
只是等待A的执行。还要修复A本身,这完全是在滥用承诺:
async function A() {
const rates = await axios.get('API_ENDPOINT_URL')
return rates.data.data;
}
答案 1 :(得分:0)
您的函数A返回一个Promise,因此您可以使用
await A()
或A().then(results => console.log(results))
答案 2 :(得分:0)
您已经打电话给.then,就像这样:
contains(_:)
答案 3 :(得分:0)
实际上,您在这里不需要async
或await
的特殊原因。您也可以只从.then()
处理程序中返回一个值,该值将在支持axios的任何环境中运行(不需要异步/等待支持):
function A() {
return axios.get('API_ENDPOINT_URL').then(function (rates) {
return rates.data.data;
});
}
// usage
A().then(result => {
console.log(result);
}).catch(err => {
console.log(err);
});
如果您没有意识到,此版本和使用await
的上述版本都将返回相同的内容-一个承诺可以解析为rates.data.data
或因轴错误而拒绝。
从.then()
处理程序返回一个值会将承诺链的已解析值更改为您返回的值。
除非该值也是一个承诺,否则在这种情况下,将承诺添加到链中,并且链的已解决的值将成为您返回的新承诺的已解决的值。