我是节点js的新手,我开始使用以下程序,
我想知道延迟或并行执行是如何工作的,所以我从教程网站上获取了一个程序,我的预期是
下订单2此处等待3秒钟,因此已过期6秒
发送订单号1(自第一次超时5秒起) 过期)
但我得到低于输出
发出第5号订单
function placeOrder(orderNumber) {
console.log('Order numner is ' +orderNumber);
cookAndDeliverFood(function () {
console.log('Delivering order Number ' +orderNumber);
})
}
function cookAndDeliverFood( callback) {
setTimeout(callback , 1000);
var waitTill = new Date(new Date().getTime() + 3 * 1000);
while(waitTill > new Date()){}
}
placeOrder(1);
placeOrder(2);
placeOrder(3);
placeOrder(4);
placeOrder(5);
有人可以解释一下为什么setTimeOut(回调,5000)在5秒后没有立即回调,为什么它等待接受所有订单并交付oder,它无法提供TimedOut订单?
请你帮我实现一个代码可以给我预期的输出,如上所述?
答案 0 :(得分:0)
setTimeout
会将一个函数放在堆上,然后运行它:
由于JavaScript忙于运行while
循环,因此它不会运行任何等待超时的函数。它将首先完成该功能的运行。
使用超时来代替创建延迟。