Node.js:如何以编程方式确定异步?

srl*_*rlm 3 javascript asynchronous node.js intel-edison

我希望能够采用一个不接受回调的函数,并确定它是否会异步执行.

特别是,我正在使用mraa在英特尔Edison上使用Node.js,并且它具有本机C++实现的功能i2c.readReg(address),因为它不接受回调.

  1. 如何确定某个功能是否阻止其他系统进程的处理器?
  2. 如何判断其他JS是否可以在临时运行?

或者我甚至没有以正确的方式接近这个?

jfr*_*d00 7

你无法以编程方式确定异步性.从API中可以清楚地看出,如果它是异步的,那么在你使用它的方式中几乎必须有这些迹象.

如果函数是异步的,那么这意味着它不会直接从函数调用返回结果,因为函数在结果准备好之前返回.因此,函数文档必须告诉您如何获取结果,如果它是异步的,则必须有另一种机制,例如:

  1. 您可以传入的回调函数
  2. 退回的承诺
  3. 对象上的某种事件监听器
  4. 其他一些通知机制
  5. 检查函数的代码
  6. 函数命名约定(例如node.js使用的后缀"Sync")

如果函数直接返回函数调用的结果,那么它是同步的,并且在该调用期间不会运行其他Javascript代码.


如果函数不是异步的,那么将其转换为异步操作的唯一方法是在不同的线程或进程中运行它并将值编组回主线程(在值时调用主线程中的某种回调)准备好了).