首页 > 解决方案 > 在 Promise javascript 中使用全局变量

问题描述

我不熟悉在 javascript 中使用异步函数和承诺。我正在尝试获取一些在异步函数中设置/创建的数据,这些数据作为 promise 返回。如何在 then() 函数之外获取这些数据。有没有办法做到这一点?

var config={}
//global variable


async function drawGraph(graph) {
//some code
.
.
.
config={
    linkStrength: 1,
    linkDistance: 20,
    nodeStrength: -30,
    Size: 4,
    restart: reset
  };
}

makeRequest().then(data => drawGraph(data));

console.log(config.Size);
// Doesn't work

标签: javascriptd3.jspromise

解决方案


由于drawGraph 返回一个 Promise,您至少有两个选择。第一种选择是使用现有的承诺链

makeRequest()
  .then(data => drawGraph(data))
  .then(() => console.log(config.Size));

第二种选择是使用await

const data = await makeRequest();
await drawGraph(data);
console.log(config.Size);

但是要使上面的方法起作用,虽然顶级 await 仍然不可用,但它需要被包装在一个async函数中。您可能必须执行以下操作:

async function run() {
  const data = await makeRequest();
  await drawGraph(data);
  console.log(config.Size);
}

run().then(() => console.log('Done'));

推荐阅读