Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并行运行两个函数,然后使用javascript中的prev函数的结果调用另一个函数_Javascript - Fatal编程技术网

并行运行两个函数,然后使用javascript中的prev函数的结果调用另一个函数

并行运行两个函数,然后使用javascript中的prev函数的结果调用另一个函数,javascript,Javascript,我的javascript代码 function testdata(){ var strtest_data=''; var strtest1_data=''; d3.json("js/test.json").then(function(test_json) { strtest_data=JSON.stringify(test_json); console.log(strtest_data); }) d3.j

我的javascript代码

function testdata(){
    var strtest_data='';
    var strtest1_data='';
    d3.json("js/test.json").then(function(test_json) {
        strtest_data=JSON.stringify(test_json);
       console.log(strtest_data); 
    })
    d3.json("js/test.json").then(function(test_json1) {
        strtest1_data=JSON.stringify(test_json1);
       console.log(strtest_data1); 
    })
     console.log(strtest_data); 
     var testobj=JSON.parse(strtest_data);
     var testobj1=JSON.parse(strtest_data1);
   
   console.log(JSON.stringify({data:testobj.quiz, more:testobj1.maths}));
}
在上面的代码中,我使用d3.json调用了两个函数(为了简洁起见,我调用了相同的test.json),然后使用结果调用另一个函数。这里的函数是console.log,但在实际场景中,可能是使用fetch的ajax POST调用

上述代码不起作用,因为代码的底部部分在d3.json完成之前运行

我将真诚地感谢任何帮助解决这个问题


感谢

d3.json
是异步方法,因此如果要按顺序调用它,请使用
async/wait

async function testdata() {
  let strtest_data = ""
  let strtest1_data = ""

  const test_json = await d3.json("js/test.json")
  strtest_data = JSON.stringify(test_json)
  console.log(strtest_data)

  const test_json1 = await d3.json("js/test.json")
  strtest1_data = JSON.stringify(test_json1)
  console.log(strtest_data1)

  var testobj = JSON.parse(strtest_data)
  var testobj1 = JSON.parse(strtest_data1)

  console.log(JSON.stringify({ data: testobj.quiz, more: testobj1.maths }))
}

或者使用
Promise.all同时调用它

async function testdata() {
  let strtest_data = ""
  let strtest1_data = ""

  const [test_json, test_json1] = await Promise.all([
    d3.json("js/test.json"),
    d3.json("js/test.json"),
  ])
  strtest_data = JSON.stringify(test_json)
  strtest1_data = JSON.stringify(test_json1)
  console.log(strtest_data)
  console.log(strtest_data1)

  var testobj = JSON.parse(strtest_data)
  var testobj1 = JSON.parse(strtest_data1)

  console.log(JSON.stringify({ data: testobj.quiz, more: testobj1.maths }))
}

我想在这里

 Promise.all([    d3.json("js/test.json")
    d3.json("js/test.json")].then(data =>{
//call your other function and access using data array and make your call 
}).catch(e=>console.error("error ",e));

此函数将在两个调用完成后执行,然后将结果放入数据数组中。如果任何一个调用中出现任何错误,您将在catch块中找到它。如果所有调用都成功完成,则可以在then块中执行任何操作。

我建议promise.all用于ajax调用,然后您可以同时获得两个结果。谢谢,只是想理解…,这里您使用了const。如果我使用var而不使用Stringify和Parse,我应该能够在final console.log中使用test_json.quick和test_json1.math。在这种情况下,这样做是正确的还是使用var不正确。@Arnab使用var在这种情况下仍然是正确的。我只是使用let/const作为我自己的练习