You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AngularJS的Promise链式调用逻辑正确迁移适配到VueJS

原有实现错误排查
  • 两个版本的核心逻辑错误:完全没有实现config.skip的判断分支,一上来就创建了立即reject的Promise实例,且强制设置returnEarly=true,导致永远直接返回reject状态的跳过提示,和原AngularJS逻辑完全不符
  • 语法错误:多处遗漏括号、将分号写为冒号,导致代码执行异常
  • 错误处理缺失:axios请求没有添加catch分支,请求失败(如404)时会抛出未捕获的Promise异常
  • 方案2额外问题:后续逻辑挂载在从未resolve的初始Promise的then回调中,导致逻辑永远不会执行,测试时触发超时
正确迁移实现
var foo = function(obj, config) {
    // 对齐原逻辑:skip为true时直接返回reject的Promise
    if (config.skip) {
        return Promise.reject("Skipping");
    }
    // 创建Promise实例,挂载到obj上,对齐原deferred.promise赋值逻辑
    const promise = new Promise((resolve, reject) => {
        if (obj.hasValue()) {
            resolve(obj);
            return;
        }
        // 调用接口,处理返回结果
        axios.get("/api/callToApi")
            .then(function(res) {
                if (res) {
                    resolve(res);
                } else {
                    reject(res);
                }
            })
            // 补充请求错误捕获,避免未捕获的Promise异常
            .catch(function(err) {
                reject(err);
            });
    });
    obj.promise = promise;
    return promise;
}
注意事项

如果你的jest测试中没有mock axios请求,需要补充对应接口的mock逻辑,避免真实请求触发404或者超时问题。

内容的提问来源于stack exchange,提问作者Sarah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:36:04