为什么我的承诺链没有解决?
Why is my promise chain not resolving?
我刚刚开始使用 promises。我在我的 VUE 组件中写了这个方法。调试它,api 肯定返回数据并到达注释行。
当函数 returns 它永远不会到达原始调用者 .then 方法。我设置的两个警报都不起作用。
我的 promise 链结构有误吗?
入口函数
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);
});
}
当解析一个 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 内使用,您想要 return 预缓存,或 return 模拟计算。
我刚刚开始使用 promises。我在我的 VUE 组件中写了这个方法。调试它,api 肯定返回数据并到达注释行。
当函数 returns 它永远不会到达原始调用者 .then 方法。我设置的两个警报都不起作用。
我的 promise 链结构有误吗?
入口函数
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);
});
}
当解析一个 promise 时,你应该调用传递的 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 内使用,您想要 return 预缓存,或 return 模拟计算。