Typescript 为什么我的承诺链没有解决?
我刚刚开始使用承诺。我在VUE组件中编写了此方法。通过调试,api将返回数据并到达注释行 当函数返回时,它永远不会到达原始调用方。然后方法。我设置的两个警报都不起作用 我构建我的承诺链是错误的还是什么 入口功能Typescript 为什么我的承诺链没有解决?,typescript,vue.js,axios,Typescript,Vue.js,Axios,我刚刚开始使用承诺。我在VUE组件中编写了此方法。通过调试,api将返回数据并到达注释行 当函数返回时,它永远不会到达原始调用方。然后方法。我设置的两个警报都不起作用 我构建我的承诺链是错误的还是什么 入口功能 mounted() { PersonApi.Get(this.personId).then((response) => { alert('done'); this.person = response;
mounted() {
PersonApi.Get(this.personId).then((response) => {
alert('done');
this.person = response;
this.loading = false;
}).catch((error) => {
alert(error);
});
}
打电话的图书馆
import axios from 'axios'
export default class PersonApi {
private static ResolveApiResponse(response: any): Promise<any> {
return new Promise((resolve) => {
if (response.errors != undefined && response.errors.length > 0) {
return Promise.reject(response.errors);
}
return Promise.resolve(response.Data); // code is getting to this line
});
}
public static Get(id: number): Promise<any> {
return axios.get('/api/Person/' + id)
.then((response: any) => {
return PersonApi.ResolveApiResponse(response.data);
}).catch((error: any) => {
return Promise.reject(error);
});
}
}
从“axios”导入axios
导出默认类PersonApi{
私有静态ResolveApiResponse(响应:任意):承诺{
返回新承诺((解决)=>{
if(response.errors!=未定义&&response.errors.length>0){
返回承诺。拒绝(响应。错误);
}
返回Promise.resolve(response.Data);//代码将到达此行
});
}
公共静态Get(id:number):承诺{
返回axios.get('/api/Person/'+id)
。然后((响应:任意)=>{
返回PersonApi.ResolveApiResponse(response.data);
}).catch((错误:任意)=>{
返回承诺。拒绝(错误);
});
}
}
固定代码
更新至此
private static ResolveApiResponse(response: any): Promise<any> {
return new Promise((resolve, reject) => {
if (response.errors != undefined && response.errors.length > 0) {
resolve(response.errors);
}
resolve(response.Data);
});
}
private静态ResolveApiResponse(响应:any):承诺{
返回新承诺((解决、拒绝)=>{
if(response.errors!=未定义&&response.errors.length>0){
解决(响应错误);
}
解析(response.Data);
});
}
解析承诺时,应调用传递的resolv函数对象,而不是使用promise.resolve
函数生成新承诺
new Promise((resolv, reject) => {
resolve('hello world'); // Resolv the promise
Promise.resolve('Hello World'); // This makes a new promise that is directly resolved
})
通常,
Promise.resolve
仅当在api内部,您希望返回预缓存或模拟计算时才应使用。解析承诺时,调用resolve
而不是Promise.resolve
,拒绝状态也是如此