我在网络上看了一下,找不到一个很好的答案,所以我会问你们。
我有一个异步函数,该函数从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)
我真的很感谢你们。
答案 0 :(得分:-1)
我在您的代码中看到的是,函数检查源正在从另一个函数内部返回已解决的Promise,并且在您调用它时,您正尝试使用then和catch来解决该Promise。事实并非如此。试试这样的控制台日志
console.log(CheckSource());
这应该打印False。