处理另一个函数调用的异步函数时出现问题

时间:2018-10-08 21:52:24

标签: javascript ajax promise async-await

简而言之,我有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 }
}

如何解决此问题?

4 个答案:

答案 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)

实际上,您在这里不需要asyncawait的特殊原因。您也可以只从.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()处理程序返回一个值会将承诺链的已解析值更改为您返回的值。

除非该值也是一个承诺,否则在这种情况下,将承诺添加到链中,并且链的已解决的值将成为您返回的新承诺的已解决的值。