【发布时间】:2019-08-05 12:57:00
【问题描述】:
我正在尝试使用回调函数进行控制台,它本身是 setTimeout 函数中的回调函数。如何才能得到有序的结果?
我希望调用 f1 的回调,然后调用 f2,最后调用 f3,无论它们的计时器如何。
let f1 = (cb) => {
setTimeout(() => {
cb(null, {a: 1})
},100)
}
let f2 = (cb) => {
setTimeout(() => {
cb(null, {a: 2})
},50)
}
let f3 = (cb) => {
setTimeout(() => {
cb(null, {a: 3})
},10)
}
function parallelConsole(arr, cb) {
let result = [];
arr.forEach(func => {
func((temp, val) => {
console.log(val)
result.push(val)
if(arr.length === result.length) {
cb(result)
}
})
})
}
parallelConsole([f1, f2, f3], (res) => {
console.log(res) //[{a: 3}, {a: 2}, {a: 1}]
})
预期结果:[{a: 1}, {a: 2}, {a: 3}]
实际结果:[{a: 3}, {a: 2}, {a: 1}]
【问题讨论】:
-
你会并行执行还是顺序执行? f3 的超时时间比 f2 的超时时间短,f2 的超时时间比 f'3 的超时时间短。结果很明显 f3,f2,f1。
-
@Alessandro 是的,我希望结果是 f1,f2,f3。这就是我在这里的原因。
-
@Alessandro 无论计时器如何,我都希望 f1 在结果 [0] 处。
-
@StefanN 在这里,我按照您分享的链接中的说明进行了操作。我仍然没有得到预期的结果。链接:jsfiddle.net/0v923pLq/1
标签: javascript node.js asynchronous settimeout