为什么我的承诺链没有解决?

时间:2018-01-30 14:06:54

标签: typescript vue.js axios

我刚开始使用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);
        });
    }

1 个答案:

答案 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中使用,你想要返回一个预先缓存的,或者返回一个模拟的计算。