我正在做一个模块,其中包含一个类,每次我们使用一个函数时都会调用一个api。
我想处理结果&catch IN模块,只返回数据。
function getAllFromTable(aTableName){
const request = {
.... aTableName
}
return apiCall(request)
}
function apiCall(requestConfig){
axios(requestConfig).then(result => {
return result.data
}
.catch(err => {
return err
}
}
这就是我想要做的但是这只会返回"undefined"..">
是否有一种方法可以在then()中返回来发送数据?或者另一种方式,只发送回数据而不发送Promise给调用函数的人&;getAllFromTable()&;
?是否有一种方法可以在then()中返回以发回数据?或者另一种方式,只发送回数据而不发送Promise给调用函数的人&;getAllFromTable()&;
?
。在Javascript中,没有办法直接返回异步检索的结果。你必须使用异步机制,如承诺,回调或事件来通信回异步结果。因为你已经有了一个promise,你只需要返回这个promise,并确保它的解析值是你的最终结果。然后,调用者可以使用.then()
或await
从承诺中获取结果。
这就是我想要做的想法但是当然这只会返回"未定义"…
在您的apiCall()
函数中,您必须返回承诺并修复错误处理。
改变:
function apiCall(requestConfig){
axios(requestConfig).then(result => {
return result.data
}.catch(err => {
return err
});
}
:
function apiCall(requestConfig){
return axios(requestConfig).then(result => {
return result.data;
});
}
我删除了.catch()
,因为您将承诺从拒绝更改为已解决,并使错误对象成为已解决的值。这不太可能是您想要的函数行为,也不太可能是调用者想要的。如果你想要一个.catch()
来记录错误或其他什么,那么你可以再次抛出错误,以确保承诺保持被拒绝。
function apiCall(requestConfig){
return axios(requestConfig).then(result => {
return result.data;
}).catch(err => {
// log error and rethrow so the promise stays rejected
console.log(err);
throw err;
});
}
apiCall()
的调用者将使用.then()
或await
来获得函数返回的承诺的解析值。
apiCall(...).then(val => {
console.log(val);
}).catch(err => {
console.log(err);
});