Javascript解决Promise待处理

时间:2018-10-05 14:23:13

标签: javascript d3.js promise

JS的新手,我想把我的头放在我可以利用一些见解的Promise上。

let urlPath = "some urlpath with data"
let data = d3.csv(urlPath).then(function (d) { 
       console.log(d);                     // Prints data as expected
});

我的目标是我希望函数将数据返回到DATA变量中,以便我可以继续在代码中进一步对其执行。所以类似于以下内容:

let data = d3.csv(urlPath).then(function (d) { return d; });
//....do more things with data....
console.log(data); // returns Promise { pending }

但是代码不断给我Promise {pending}。有什么想法可以解决我的诺言,以便我得到想要的东西吗? 谢谢,

1 个答案:

答案 0 :(得分:2)

这对于ECMAScript 2015版本是不可能的。但是,使用ES2017,您可以使用asyncawait IIFE中实现此目标:

(async () => {
  let data = await d3.csv(urlPath)
  //....do more things with data....
  console.log(data)
})()

对于错误处理,您可以将其包装在try...catch中:

(async () => {
  try {
    let data = await d3.csv(urlPath)
    //....do more things with data....
    console.log(data)
  } catch (error) {
    // handle error
  }
})()

这类似于ES2015中的以下内容:

d3.csv(urlPath).then(data => {
  //....do more things with data....
  console.log(data)
}).catch(error => {
  // handle error
})