检查变量是否为“异步函数”类型

时间:2019-11-25 17:07:29

标签: javascript asynchronous async-await

给出一个变量,其定义如下:

 <option value="1|Fruit">Fruit</option>

如何检查变量 $test1 = explode('|', $_POST['select1']); $test2 = explode('|', $_POST['select2']); 是否为const f = async function() {/* ... */}; 类型?

我已经找到了此解决方案:

f

但是“ f.constructor.name”与IE11不兼容。还有其他想法吗?

我知道异步功能在IE11中不起作用,...但是它们通过babel编译过程起作用。这个想法是找到一种方法来检测类似于node.js的环境中的异步功能,例如,该环境将与IE11 / babel兼容

2 个答案:

答案 0 :(得分:1)

这似乎是个坏主意。有很多功能可以有效地异步(返回一个Promise),但是没有被标记为此类(可能是为了浏览器支持而被向下编译)。

如果您确实想测试函数是否异步,则最好测试返回值是否具有.then属性:

const maybeTask = f()
if ('then' in maybeTask) {
  maybeTask.then( .... )
}

答案 1 :(得分:0)

您尝试了<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="index.css" /> <title> HTML Document </title> </head> <body> <div id="main-grid"> <div id="main-grid-top-left-item"> <span class="white-background"> 0 </span> </div> <div id="main-grid-top-right-item"> <span class="white-background"> 1 </span> </div> <div id="main-grid-bottom-left-item"> <span class="white-background"> 2 </span> </div> <div id="main-grid-bottom-right-item"> <span class="white-background"> 3 </span> </div> </div> </body> </html>而不是f.constructor.name

前者检查f的构造函数,而后者将检查f()返回的值。 如果f是一个异步函数,则f().constructor.name应该返回“ Promise”。

不太确定这是否是检查异步功能的最佳方法,但认为可以帮上忙。