我是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()
})
}

答案 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)
有两种方法可以达到你想要的效果。我想我得到了你想要的东西。
利用回调功能 利用节点事件发射器。