Javascript 为什么Axios不兑现承诺?
我有以下代码,但没有控制台输出。似乎无论我做什么,它都不会输入Javascript 为什么Axios不兑现承诺?,javascript,node.js,axios,azure-functions,Javascript,Node.js,Axios,Azure Functions,我有以下代码,但没有控制台输出。似乎无论我做什么,它都不会输入then()或catch() 有趣的是,请求在另一端被发送和接收。我还可以通过模仿postman来验证端点是否正确响应。这在哪里会失败 编辑:它变得更加奇怪:我尝试了以下方法,它立即打印出承诺: console.log(await axios.post(url, {test: "0"})); 不幸的是,我被迫使用节点v8.11.1-这可能是问题所在吗 编辑2:。然后(console.log)只是另一种编写的方式。然后(respons
then()
或catch()
有趣的是,请求在另一端被发送和接收。我还可以通过模仿postman来验证端点是否正确响应。这在哪里会失败
编辑:它变得更加奇怪:我尝试了以下方法,它立即打印出承诺:
console.log(await axios.post(url, {test: "0"}));
不幸的是,我被迫使用节点v8.11.1-这可能是问题所在吗
编辑2:。然后(console.log)
只是另一种编写的方式。然后(response=>console.log(response))
但为了确保我也使用了推荐的方式:
axios
.post(url, {test: "0"})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
问题仍然存在。将console.log函数作为resolve回调传递时,您失去了log函数的上下文。上下文是控制台 解决方案1: 将上下文重新绑定到函数日志
axios
.post(url, {test: "0"})
.then(console.log.bind(console))
.catch(console.error.bind(console));
axios承诺工作正常。已绑定函数日志上下文:
解决方案2:
使用arrow函数不能释放上下文
axios
.post(url, {test: "0"})
.then((res) => console.log(res))
.catch((err) => console.error(err));
希望它能解决您的问题。根本不是Axios的问题。Azure在帖子发布后立即终止了我的进程,并没有等待承诺得到解决。如果有人有类似的问题,请参见。
。然后((响应)=>console.log(响应))
在这里失败,并且对捕获也做同样的事情。@NicolaMaties没有区别。@NicolaMaties为什么?如果直接调用是完全合法的,那么控制台对象不是被什么东西覆盖了吗?您可以尝试将调试器语句放入提供给then和catch的回调中,以查看是否调用了任何调试器语句(.then(response=>{debugger;})
)。另外,您可以直接检查post函数的返回值,看看它是否是一个承诺,而不仅仅是记录,您是否检查过它是否是CORS问题?谢谢您的努力,但这是错误的.catch(console.error)
只是直接调用.catch((err)=>console.error(err))
,逻辑上与注释中已经讨论过的相同。log
将在其中执行的上下文不同。此
将不会在控制台中显示。默认情况下,JavaScript中的执行上下文取决于函数的调用方式,而不是函数的定义方式。如果希望this
成为console
,则需要绑定到console。使用arrow函数,您可以直接在console实例上调用该函数,而不会传递该函数以便稍后执行,正如多人在评论中确认的那样:这真的没有什么区别。不过我还是试了一下,以防万一,并据此编辑了我的文章。有关此问题,请参阅编辑2。@RobinBiondi您说函数将丢失其上下文是正确的,但是console
方法在内部不使用this
,因此OP的代码也应该工作。这个问题来自其他地方。
axios
.post(url, {test: "0"})
.then((res) => console.log(res))
.catch((err) => console.error(err));