Javascript 理解非阻塞IO示例

Javascript 理解非阻塞IO示例,javascript,node.js,Javascript,Node.js,在阅读node.js教程时,我发现他们以餐厅服务为例解释了场景 在阻塞IO时,它们有一个代码: // requesting drinks for table 1 and waiting... var drinksForTable1 = requestDrinksBlocking(['Coke', 'Tea', 'Water']); // once drinks are ready, then server takes order back to table. serveOrder(drinksF

在阅读node.js教程时,我发现他们以餐厅服务为例解释了场景

在阻塞IO时,它们有一个代码:

// requesting drinks for table 1 and waiting...
var drinksForTable1 = requestDrinksBlocking(['Coke', 'Tea', 'Water']);
// once drinks are ready, then server takes order back to table.
serveOrder(drinksForTable1);
// once order is delivered, server moves on to another table.
在非阻塞IO中,他们将其更改为:

// requesting drinks for table 1 and moving on...
requestDrinksNonBlocking(['Coke', 'Tea', 'Water'], function(drinks){
  return serveOrder(drinks);
});
据我所知,第二个代码也需要同样的时间来执行,然后移动到下一行代码。如何区分

另外,如何编写“function requestDrinksNonBlocking”,它可以处理数组['Coke'、'Tea'、'Water',然后使用匿名函数执行serveOrder

请帮我理解这个场景

据我所知,第二个代码也需要同样的时间来执行,然后移动到下一行代码。如何区分

这段代码在隔离状态下需要多长时间并不重要。在第二种情况下,在调用作为回调传递的函数之前可能会发生其他情况,例如,可以处理其他请求,而不是等待

另外,如何编写“function requestDrinksNonBlocking”,它可以处理数组['Coke'、'Tea'、'Water',然后使用匿名函数执行serveOrder

对于如何编写一个函数而不知道它应该做什么的问题,有无数个答案。

在第一个示例中,requestDrinksNonBlocking执行,您使用输出调用serveOrder

在第二个示例中,requestDrinksNonBlocking接受一个回调serveOrder,当请求完成时,它将调用该回调serveOrder

requestDrinksNonBlocking实现示例

requestDrinksNonBlocking=function(drinks,callback){
    //Handle request from the array {drinks}
    callback(drinks);
}