并行运行两个函数,然后使用javascript中的prev函数的结果调用另一个函数
我的javascript代码并行运行两个函数,然后使用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
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作为我自己的练习