我刚开始使用promises。我在我的VUE组件中编写了这个方法。调试它,api肯定会返回数据并进入注释行。
当函数返回时,它永远不会进入原始调用者。然后是方法。我设置的警报都没有工作。
我构建我的承诺链是错误还是什么?
入场功能
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);
});
}
}
固定代码
已更新至
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);
});
}
答案 0 :(得分:1)
解析promise时,应该调用传递的resolv函数对象,而不是使用Promise.resolve
函数创建新的promise
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中使用,你想要返回一个预先缓存的,或者返回一个模拟的计算。