Javascript异步功能从API获取正确的数据,但仅返回“未定义”

时间:2019-02-21 02:34:13

标签: javascript

我在网络上看了一下,找不到一个很好的答案,所以我会问你们。

我有一个异步函数,该函数从API获取对/错数据,我能够打印从API获得的值,但是当我返回该值时,我得到的是“未定义”。 我觉得问题出在我返回该变量的方式上,但是就像我说的那样,我一直无法找到答案,所以,如果有人知道如何做到这一点,那就太好了。

功能如下:

const CheckSource = async function(AttId, symbolId){

//creates the get parameters
    var SourceGetParams = Helper.returnGetOptions(`SignalValues/${symbolId}/${AttId}`);

//send the get request and waits for responce
    await Helper.sendRequest(SourceGetParams).then((res, body) => {

//parses the response, prints the correct value, but returns "undefined"
        var response_body = JSON.parse(res.body);
        var value = response_body.API_Signals[0].RawValue
        console.log(value);
        return Promise.resolve(value);

//error handling
    }, (error) => {
        console.log('error sending source get request:', error);
        return Promise.reject('There was an error with the fusion request.');
    }).catch((error) => {
        console.log('Source sendRequest promise error:', error);
        return Promise.reject('There was an internal error sending the request.');
    }); }

我尝试使用不同的方法来返回值(例如'return value;'),但是得到的结果是相同的。

这是我调用函数的方式:

CheckSource(<Att_ID string here>, <Symbol_ID string here>).then((data)=>{
    console.log(data)
});

我知道这是一个经常被问到的问题,我尝试了这里找到的许多其他答案,但没有得到结果。

我得到的答案是:

False //(this is the expected output from the conslole.log() in the async function)

undefined //(this is the console.log() after I called the function)

我真的很感谢你们。

1 个答案:

答案 0 :(得分:-1)

我在您的代码中看到的是,函数检查源正在从另一个函数内部返回已解决的Promise,并且在您调用它时,您正尝试使用then和catch来解决该Promise。事实并非如此。试试这样的控制台日志

console.log(CheckSource());

这应该打印False。