【问题标题】:How to get the value after promise in Javascript? [duplicate]如何在Javascript中获得承诺后的价值? [复制]
【发布时间】:2018-09-21 04:35:09
【问题描述】:

我正在使用 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

【问题讨论】:

  • 欲了解更多信息,请阅读:]stackoverflow.com/questions/14220321/…
  • "在执行console.log("c")之前我需要值msg" - 但在那个时间点,值还不存在 - 它是异步的!您唯一的选择是将console.log("c") 移动到then 回调中。
  • 那我怎么能等待这个值到达,因为我需要在 fetch 之后加载一个具有该值的组件,而我的网页上只得到一个未定义的值。

标签: javascript rest callback promise


【解决方案1】:

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 对其进行测试。

您的代码示例 (undefined):

var c;

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

在回调内部:

var c;

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

编辑
作为您评论的后续行动:

我需要“获取”块之外的“c”值

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

【讨论】:

  • 我需要“c”的值,在“fetch”块之外。
  • 但它在外部(全局)
  • 是的,因为我需要那个变量 c,已经在 fetch 之后了。
猜你喜欢
  • 1970-01-01
  • 2022-12-17
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2014-03-17
  • 2018-05-16
相关资源
最近更新 更多