我正在学习node.js.到目前为止,我已经理解了回调的含义,但我不确定是否要同步执行回调(调用者不会继续前进,直到回调返回)或异步(调用者进行回调并继续执行其代码)。如何识别回调是要同步执行还是异步执行?
回答
你真的无法通过查看函数调用出来。 Some callbacks are asynchronous, others are not。您需要检查文档,它将应该在那里陈述。
通常你可以通过函数的签名来区分它们。如果回调预计只有一次计算结果被调用,并且回调函数和函数都不返回任何东西,回调通常是异步调用的(setTimeout
,readFile
等)。如果函数立即返回结果,则通常会同步调用多次回调(Array::sort
,Array::map
)并生成有价值的值。当然,例外证明了这一规则,有时你不能轻易说出,例如setInterval
vs Array::forEach
(两者都不返回,并且多次调用回调)。
您可以使用一个标志是:
var async = false;
someFunction(function() {
console.log(async ? 'async' : 'sync');
});
async = true;
我不想使用标志。 – avinashkrsharma 2014-09-26 11:08:35
我会尝试重新解释你的问题,因为在“异步函数调用”和“异步IO”术语中存在很多混淆。
让我们这样写:给定代码如下,并且不看“foo”源代码,我们可以运行一些测试来判断输出是“Line 1 \ nLine2”还是“Line 2 \ nLine1” ?
var t1 = asyncTestCapture();
foo(function() {
console.log("Line 1");
});
console.log("Line 2");
var out12vsOut21 = asyncTestVerify(t1);
回答数1:不要试图靠这个次序例外与回调参数(Array的的forEach,地图等,字符串替代品,JSON齐磊)
回答一个众所周知的标准功能上2号:(请注意,我测试的代码很简单,它是Node.js的具体,但我相信它可以回答“out12vsOut21”的问题还请注意,我使用无证节点的功能。)
function asyncTestCapture() {
return {
activeHandles: process._getActiveHandles(),
activeRequests: process._getActiveRequests()
};
}
function asyncTestVerify(handles1) {
var handles2 = asyncTestCapture();
return handles2.activeHandles === handles1.activeHandles && handles2.activeRequests === handles1.activeRequests
}
我我们再重复一遍:如果你需要上面的代码,那就错了在你的设计中。你不需要知道“out12vsOut21”命令,以不依赖于“async或not foo”的方式构建你的代码。
- 1. RestSharp执行同步,而不是异步
- 2. WCF回调 - 同步执行
- 3. 是同步还是异步?
- 4. 异步执行
- 5. 异步执行
- 6. 执行异步RIA服务调用时执行的回调是哪个线程?
- 7. 异步映射 - 早期执行回调
- 8. 节点异步不执行回调
- 9. 用回调执行异步函数吗?
- 10. Cocoa:IBAction回调是同步的还是异步的?
- 11. 异步执行中的同步睡眠?
- 12. 执行异步代码同步
- 13. 保持同步和异步执行
- 14. 同步执行异步功能
- 15. 异步同步执行更好?
- 16. node.js的“N”异步回调执行后,执行功能
- 17. jQuery - 异步执行
- 18. 异步PHP执行
- 19. Nodejs异步执行
- 20. PHP异步执行
- 21. 如何同步执行WorkflowApplication
- 22. javascript函数是同步还是异步?
- 23. 是Javascript“eval”同步还是异步?
- 24. Javamail是异步的还是同步的?
- 25. SELECT是同步的还是异步的?
- 26. 是ko.applyBindings同步还是异步?
- 27. dispatchEvent是同步还是异步函数
- 28. curl_easy_perform()是同步的还是异步的?
- 29. ByDefault NSURLConnection是同步还是异步
- 30. 是 - [UITableView reloadData]异步还是同步?
好问题,欢迎来到SO :) – DrakaSAN 2014-09-26 10:02:34
谢谢DrakaSAN :) – avinashkrsharma 2014-09-26 10:19:18
我问过它node.js的上下文 – avinashkrsharma 2014-09-26 11:15:51