从函数返回 Axios Promise

谁能解释一下,为什么返回 Axios 承诺可以进一步连锁,而应用 "then()/catch() "方法后返回却不行?

请举例说明:

解决办法

第一个示例返回的是原始承诺。第二个例子返回的是一个不同的 promise,即调用 catch 时创建的那个。

两者的关键区别在于

1.在第二个示例中,您没有传递解析值,因此您的 then 返回的约定的解析值是 undefinedconsole.log 的返回值)。

2.在第二个示例中,您使用 undefined(通过从 catch 返回 console.log 的结果)将拒绝转换为解析。一个不抛出或返回被拒绝的 promise 的 catch 处理程序会将拒绝转换为解决。

许诺链的关键之一在于它们会转换结果;每次调用 thencatch 都会创建一个新的许诺,而它们的处理程序可以在结果经过它们时修改向下游发送的内容。

通常的模式确实是返回链的结果,但是链中的函数要么有意转换结果,要么将结果传递出去。通常情况下,除了在链的终端,您不会使用 "catch "处理程序,除非您使用它来纠正错误条件(有意将拒绝转换为解决)。

如果你只想记录通过的内容,同时仍允许调用者查看,但又**想返回链的结果,不管出于什么原因,你都会这样做:

return request
    .then(result => { console.log(result); return result; })
    .catch(error => { console.error(error); return Promise.reject(error); });

或使用 throw

return request
    .then(result => { console.log(result); return result; })
    .catch(error => { console.error(error); throw error; });
评论(1)