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));