了解非阻塞IO示例

时间:2017-03-21 12:02:18

标签: javascript node.js

在阅读node.js教程时,我遇到了this page,他们使用"餐厅服务"来解释了这个场景。举个例子。

阻止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);
});
  1. 根据我的理解,第二个代码也会花费相同的时间来执行,然后转到下一行代码。如何区分?

  2. 另外,如何编写函数requestDrinksNonBlocking()'它可以处理数组['Coke', 'Tea', 'Water'],然后使用匿名函数执行serveOrder

  3. 请帮助我了解情况。

2 个答案:

答案 0 :(得分:1)

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

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

requestDrinksNonBlocking实施的示例

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

答案 1 :(得分:0)

  

根据我的理解,第二个代码也将花费相同的时间来执行,然后转到下一行代码。如何区分?

此代码隔离多长时间并不重要。在第二种情况下,在函数传递之前可能会发生其他事情,因为调用了一个回调,例如可以处理其他请求而不是等待。

  

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

关于如何编写函数而不告诉它应该做什么的问题有很多答案。