我想知道如何返回Axios的承诺表格?我不确定是否需要使用拦截器?
我现在有这个代码
export function fetchStorage() {
return function (dispatch) {
return new Promise(function(resolve, reject) {
if (1 === 1) {
resolve('it works!');
} else {
reject(':(');
}
});
};
}
和
this.props.fetchStorage().then(function() {
console.log('then');
});
现在说我想改变fetchStorage通过ajax做一些事情,我希望它能像
一样 var instance = axios.create({
baseURL: 'http://localhost:54690/api',
timeout: 2000,
});
instance.get('/Storage/Get')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
如何返回承诺而不是在此处执行?
编辑
为了澄清为什么我这样做,我有类似的东西
componentWillMount() {
this.props.setPreLoader(true);
this.props.fetchStorage().then(function() {
this.props.setPreLoader(false);
});
}
export function fetchStorage() {
return function (dispatch) {
return new Promise(function (resolve, reject) {
axiosInstant.get('/Storage/Get')
.then(function (response) {
let payload = response.data;
console.log(payload);
dispatch({ type: actions.FETCH_STORAGE, payload: { storages: payload } });
})
.catch(function (error) {
console.log(error);
});
});
};
}
答案 0 :(得分:0)
必须有更好的方法,但是您可以
export async function fetchStorage() {
return async function (dispatch) {
try {
const { data } = await axiosInstant.get('/Storage/Get')
dispatch({ type: actions.FETCH_STORAGE, payload: { storages: data } })
return data
} catch (e) {
console.error(e)
}
}
}
然后您必须按以下方式使用fetchStorage
this.props.fetchStorage().then(async function(response) {
let payload = await response()
});
答案 1 :(得分:0)
Axios基于承诺,因此您无需将其包装在Promise中, 您可以执行以下操作和axiosInstance。[post | put | get | end等]方法将返回promise。
export function fetchStorage() {
return function (dispatch) {
return axiosInstant.get('/Storage/Get')
.then(function (response) {
let payload = response.data;
console.log(payload);
dispatch({ type: actions.FETCH_STORAGE, payload: { storages: payload } });
})
.catch(function (error) {
console.log(error);
});
};
}
答案 2 :(得分:-5)
见样本:
return new Promise(function (resolve, reject) {
var instance = axios.create({
baseURL: 'http://localhost:54690/api',
timeout: 2000,
});
instance.get('/Storage/Get')
.then(function (response) {
if(1 === 1)
resolve(response);
})
.catch(function (error) {
reject(error);
});
});