作用: 代替try catch
不使用此插件
async function getList (){
try{
loading = true;
let res = await request('api/getList')
list = res.data
loading = false;
}(err){
loading = false;
throw Error('api/getList错误:', err)
}
}
使用此插件
async function getList (){
loading = true;
let req = request('api/getList')
let [err, res] = await to(req)
loading = false;
if(err){
return throw Error('api/getList错误:', err)
}
list = res.data
}
源码解析
将then和catch做了一次包装,返回值一定是[null, data] 或 [parsedError, undefined]。 catch 时可加入自定义erorr
/**
* @param { Promise } promise
* @param { Object= } errorExt - Additional Information you can pass to the err object
* @return { Promise }
*/
export function to<T, U = Error> (
promise: Promise<T>,
errorExt?: object
): Promise<[U, undefined] | [null, T]> {
return promise
.then<[null, T]>((data: T) => [null, data])
.catch<[U, undefined]>((err: U) => {
if (errorExt) {
const parsedError = Object.assign({}, err, errorExt);
return [parsedError, undefined];
}
return [err, undefined];
});
}
export default to;