如何同步执行javascript函数

时间:2018-05-22 02:00:56

标签: javascript node.js

我是nodejs的新手。有人可以给我写一个sudo代码来执行以下操作吗?

功能1(); //返回一个可以在function2和function3中使用的数组

功能2(); //返回一个可以在function3中使用的数组

功能3();

我想同步运行所有三个功能。 因此function2必须等待function1完成,然后使用function2中返回的数组。然后function3等待function2完成,然后在function3中使用返回的数组,依此类推。

尝试过这样的事情,但似乎同时执行。



function main() {
    return Promise.resolve()
        .then (function(){
            function1()
        })
        .then (function(){
            function2()
        })
        .then (function(){
            function3()
        })
}




5 个答案:

答案 0 :(得分:2)

这可能会帮助你:

function main() {
return Promise.resolve()
    .then (function(){
        return function1()
    })
    .then (function(results){
        // process your results
        return function2([pass arguments IF required])
    })
    .then (function(results){
        // process your results
        function3([pass arguments IF required])
    })
    .then (function (results) {
        return results
     })
    .catch(function(err) {
        console.log(err)
     })

}

因此,简而言之,您错过的是返回下一个要捕获和使用的函数值。

答案 1 :(得分:0)

示例,其中每个函数返回一个promise,该promise通过返回一个数组返回,该数组被传递给下一个函数,其中数组中的每个元素都乘以10

[1,2,3]开始传递给function2变为[10,20,30],它将传递给function3并变为[100,200,300]



function asynchFake(data){
  return new Promise((resolve)=>{
      setTimeout(()=> resolve(data),1000)
  })
}

function func1(){
  console.log('func1')
  return asynchFake([1,2,3])
}

function func2(func1Data){
  console.log('func2')
  return asynchFake(func1Data.map(v=>v*10));
}

function func3(func2Data){
  console.log('func3')
  return asynchFake(func2Data.map(v=>v*10))
}

function main() { 
    console.log('main')
    return func1().then(func2).then(func3)
}

main().then(res=>console.log('final results', res))




答案 2 :(得分:0)

您还可以尝试async/await使这三个函数同步运行:

function function1(){
	return [1]
}

function function2(arr){
	return arr.concat([2])
}

function function3(arr){
	return arr.concat([3])
}

async function main(){
	let res = await function1(); // waits for function1 to complete before moving to the next line
	let res2 = await function2(res); // similarly waits for the completion of function2
	let res3 = await function3(res2); // similarly waits for the completion of function3
	console.log(res3)
	console.log("end of main")
}

main()

答案 3 :(得分:0)

这里有两种方法可以实现您的目标。当你使用两种不同的功能时,它有点棘手,但我想我得到了你想要的东西。

  • 利用回调功能
  • 利用节点事件发射器

答案 4 :(得分:0)

有两种方法可以达到你想要的效果。我想我得到了你想要的东西。

利用回调功能 利用节点事件发射器。