检测函数是否异步(使用 NodeJS)

问题描述 投票:0回答:1

这在 Web 浏览器中是一个简单的任务,但在 NodeJS 中没有区别:

console.log({
  // 'Function' in browser, but empty string ('') in NodeJS
  '(() => {}).constructor.name': (() => {}).constructor.name,
  '(() => {}).__proto__.constructor.name': (async () => {}).__proto__.constructor.name,

  // 'AsyncFunction' in browser, but empty string ('') in NodeJS 
  '(async () => {}).constructor.name': (async () => {}).constructor.name,
  '(async () => {}).__proto__.constructor.name': (async () => {}).__proto__.constructor.name,
  
  // Evaluates to false in browser, but true in NodeJS
  '(async () => {}).constructor === (() => {}).constructor': (async () => {}).constructor === (() => {}).constructor,
  '(async () => {}).__proto__ === (() => {}).__proto__': (async () => {}).__proto__ === (() => {}).__proto__,
  '(async () => {}).__proto__.constructor === (() => {}).__proto__.constructor': (async () => {}).__proto__.constructor === (() => {}).__proto__.constructor,
});

我想区分这一点的原因是这样我可以不加区别地添加包装器代码,同时维护函数的“签名”。如果我要将所有内容转换为仅通过

thenable
接受
Promise.resolve
对象,那么我必须将大多数函数调用转换为异步方法(或期望异步
thenable
)。这对于 Nodejs(或 React Native)来说是一个问题,因为它遵循 Promises/A+ 规范,因此不加区别地期望所有内容都是异步的确实会改变代码的功能。

有谁知道如何同时完成此任务或某种解决方法?

javascript node.js asynchronous async-await
1个回答
0
投票

我想区分这一点,这样我就可以不加区别地添加包装器代码,同时维护函数的“签名”

那么你不应该关心函数是否是使用

async
/
await
语法定义的。

当你调用它时,你应该关心它是否返回一个承诺。而且很容易区分

© www.soinside.com 2019 - 2024. All rights reserved.