我在实验/
在不同的关键字和运算符周围是如何解释的,发现以下语法是完全合法的:
// awaiting something that isn't a Promise is fine, it's just strange to do:
const foo = await /barbaz/
myFn()
错误:
未捕获的引用错误:等待未定义
它似乎试图将wait
解析为变量名。。?我期待着
或者是类似于
意外令牌等待
令我恐惧的是,你甚至可以给它分配一些东西:
const await = 'Wait, this actually works?';
console.log(await);
如此明显错误的东西不应该导致语法错误吗,就像let
,终于
,打破
等一样?为什么允许这样做,以及第一个片段中到底发生了什么?
保留的关键字不能用作标识符(变量名)。与大多数其他特殊的Javascript单词不同(如问题中列出的那些,let
,最后
,...),wait
不是一个保留的关键字,所以使用它作为变量名不会抛出SynTaxError。为什么新语法出来时没有把它做成保留关键字?
早在2011年,ES5还是一个相对较新的东西,使用wait
(和async
)作为变量名的代码是完全有效的,所以你可能在几个网站上看到过这样的东西:
function timeout(ms) {
var await = $.Deferred();
setTimeout(await.resolve, ms);
return await.promise();
};
这个变量名称的选择可能看起来很奇怪,但并没有错。wait
和async
从来都不是保留关键字——如果ES2017规范的作者将wait
变成保留关键字,浏览器实现了这一变化,在新浏览器上访问这些旧网站的人将无法使用这些网站;他们很可能会崩溃。
因此,如果它们被做成保留关键字,一些选择了特殊变量名的站点可能无法正常工作——为什么这些站点的存在会永久性地影响ECMAscript的未来发展,并导致像问题中那样的代码混乱?
因为浏览器将拒绝实现破坏现有网站的功能。如果用户发现一个网站不在一个浏览器上运行,而是在另一个浏览器上运行,这将激励他们更换浏览器——第一个浏览器的制造商不会希望这样,因为这对他们来说意味着更少的市场份额,即使是使语言更加一致和易懂的功能。此外,规范的编辑器不想添加一些永远不会实现(或者只会偶尔实现)的东西,因为这样规范就会失去一些作为标准的地位——与它的主要目标相反。
您可以在Array.prototype.flatten
和Array.prototype.contains
中看到这些交互-当浏览器开始发送它们时,发现它们由于名称冲突而破坏了一些现有的站点,因此浏览器退出了实现,规范必须进行调整(方法被重命名为。平面
和。包括
)。
实际上,有一种情况是wait
不能用作标识符,它位于ES6模块内部:
<script type="module">
const await = 'Does it work?';
</script>
我正在研究promsies和async/await的用法。 我编写了以下代码,它执行以下操作: 它获取一些数据库数据(使用Knex.js), 处理该数据, 将处理的数据分配到指定的属性中 这3个步骤执行了多次(在下面的代码中,执行了两次),并且始终等待执行: 现在,我正在尝试编写与等效的promise链,这就是我想到的: 但这不太管用。发生的是,在第一个返回之后,中的结束了它的等待,这导致返回-并
我一直在使用ECMAScript 很明显第一步是ECMAScript 下面是我如何实现基本promise的示例/伪代码- 随着时间的推移,我遇到了ECMAScript 同样,这里有一个伪代码,描述了我的异步等待函数的样子- 把语法错误(如果有的话)放在一边,我觉得它们做的事情完全一样。我几乎可以用async、Waities取代我的大部分promise。 当promise做类似的工作时,为什么需要异
问题内容: 我是一名普通的C#开发人员,但有时我会使用Java开发应用程序。我想知道是否有Java等效于C#async / await?简单来说,java相当于什么: 问题答案: 不,在Java中-甚至在v5之前的C#中,都没有等效的异步/等待方式。 在后台构建状态机是一项相当复杂的语言功能。 Java中对异步/并发的 语言 支持相对较少,但是该软件包包含许多与此相关的有用 类 。(不完全等同于任
我试图在react/electron项目中使用async/await,但它不起作用。我想要的是获取docker容器状态列表。但是安慰。日志(列表)返回未定义的。 有人能帮我吗?:)
我在中写了这段代码 然后我尝试在另一个文件中使用它 我得到一个错误 “等待仅在异步函数中有效” 问题是什么?
问题内容: 我写了这段代码 然后我尝试在另一个文件中使用它 我有一个错误 “等待仅在异步功能中有效” 有什么问题 问题答案: 错误不是指而是。 我利用这个问题的机会来告诉你一个已知的反模式的使用方法:。 错误 正确 另外,要知道有一个正确且重要的特殊情况:(使用try / catch)