javascript - 如何在Javascript中获取promise后的值?

标签 javascript rest callback promise

我正在使用 APIRest、Javascript 和 fetch,如下所示:

var c;

fetch('http://-:8080/CantidadPacientes')
  .then(a => a.json())
  .then( function(msg) {
        c = msg;
   });
   
console.log(c);  
 

但是当我打印变量“c”时,我得到了未定义的结果。 我怎样才能得到变量c中msg的值。在执行 console.log("c") 之前,我需要在获取之外获取值 msg

最佳答案

fetch 解析 promise 时,console.log(c) 行已经被调用。

尝试将其移动到回调中:

var c;

fetch('http://-:8080/CantidadPacientes')
  .then(a => a.json())
  .then( function(msg) {
        c = msg;
        console.log(c); 
   });

您可以使用简单的 Promise.resolve 对其进行测试。

您的代码示例(未定义):

var c;

Promise.resolve('hi').then((msg) => {
  c = msg;
});
   
console.log(c);  

在回调内部:

var c;

Promise.resolve('hi').then((msg) => {
  c = msg;
  console.log(c);
});

编辑
作为您评论的后续内容:

I need the value of "c", outside the block "fetch"

这是一个异步调用。这意味着所有全局代码(执行上下文)都将运行完成,然后回调(在本例中为微任务)才会被允许继续。
正如其他人在评论中所说,有很多问题和很好的答案来解释异步 JavaScript。
只需点击链接即可。

关于javascript - 如何在Javascript中获取promise后的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52432710/

相关文章:

javascript - 如何使用 enzyme 模拟 div 上的鼠标悬停事件以测试 react 应用程序?

java - 在 JMeter 中为不同的线程使用不同的变量

ios - 用于 CFunctionPointer 到 Swift 闭包的 Objective-C 包装器

scala - 在 akka actor 中使用 future 回调

java - 是否可以在监听更改的变量上创建注释?

javascript - 使用 AngularJS 进行验证

javascript - 单击时交换背景图像

javascript - 将 JavaScript 日期格式设置为 yyyy-mm-dd

javascript - 通过在 Protractor 测试中发布一些 JSON 数据来调用删除其余 API

用于从垃圾箱恢复操作的 RESTful url