在阅读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);
});
根据我的理解,第二个代码也会花费相同的时间来执行,然后转到下一行代码。如何区分?
另外,如何编写函数requestDrinksNonBlocking()'它可以处理数组['Coke', 'Tea', 'Water']
,然后使用匿名函数执行serveOrder
。
请帮助我了解情况。
答案 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。
关于如何编写函数而不告诉它应该做什么的问题有很多答案。