Javascript 从函数返回Axios承诺
有人能解释一下为什么返回Axios承诺允许进一步链接,但在应用Javascript 从函数返回Axios承诺,javascript,promise,axios,Javascript,Promise,Axios,有人能解释一下为什么返回Axios承诺允许进一步链接,但在应用then()/catch()方法后返回却不允许 例如: consturl='1〕https://58f58f38c9deb71200ceece2.mockapi.io/Mapss' 函数createRequest1(){ const request=axios.get(url) 要求 .then(result=>console.log(‘(1)内result:’,result)) .catch(error=>console.erro
then()/catch()
方法后返回却不允许
例如:
consturl='1〕https://58f58f38c9deb71200ceece2.mockapi.io/Mapss'
函数createRequest1(){
const request=axios.get(url)
要求
.then(result=>console.log(‘(1)内result:’,result))
.catch(error=>console.error(“(1)内部错误:”,error))
退货申请
}
函数createRequest2(){
const request=axios.get(url)
退货申请
.then(result=>console.log(‘(2)内result:’,result))
.catch(error=>console.error(“(2)内部错误:”,error))
}
createRequest1()
.then(result=>console.log(“(1)外部结果:”,result))
.catch(error=>console.error(“(1)外部错误:”,error))
createRequest2()
.then(result=>console.log(“(2)外部结果:”,result))
.catch(error=>console.error(“(2)外部错误:”,error))
您的第一个示例返回了原始承诺。第二个示例返回一个不同的承诺,即通过调用catch
创建的承诺
两者之间的关键区别是:
then
返回的承诺将使用未定义的(console.log的返回值)解析
未定义的的解决方案(通过返回控制台.log的结果退出捕获)。不抛出或返回被拒绝的承诺的catch
处理程序将拒绝转换为解决方案
then
或catch
都会创建一个新的承诺,当结果通过它们时,它们的处理程序可以修改向下游发送的内容
通常的模式确实是返回链的结果,但链中的函数要么有意地转换结果,要么将其传递。通常,除了在链的末端,您不会有catch
处理程序,除非您使用它来纠正错误条件(有意地将拒绝转换为解决方案)
如果您只想记录通过的内容,同时仍允许调用方查看,但出于任何原因确实想返回链的结果,您可以这样做:
return request
.then(result => { console.log(result); return result; })
.catch(error => { console.error(error); return Promise.reject(error); });
或者使用抛出:
return request
.then(result => { console.log(result); return result; })
.catch(error => { console.error(error); throw error; });
第二个示例返回链的“结束”,第一个示例返回请求
承诺真正的问题是,中没有返回任何内容。然后/.catch
-这将导致承诺被解析为未定义
对不起,我的错误,他们正在返回调用console.log
的结果-这是未定义的
(我瞥了一眼小提琴-这不是委婉的说法)谢谢@t.J,你的解释肯定有助于更详细地理解链接承诺。谢谢@T.J,你说得再清楚不过了。这篇文章帮助我解决了同步api调用的问题。