什么可以ES6 类 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes作为一种组织模式,提供异步代码。下面是一个 ES7 async/await 的例子,ES6 类可以有异步方法,或者 ES7 中的构造函数吗?
我可不可以做:
class Foo {
async constructor() {
let res = await getHTML();
this.res = res
}
}
而且,如果不是的话,构造函数应该如何工作来做到这一点?
class Foo {
constructor() {
getHTML().then( function (res) {
this.res = res
}
}
}
如果这些模式都不起作用,ES6 中的构造函数(以及类)可以吗?class
支持对对象状态进行操作的任何形式的异步性吗?或者,它们仅适用于纯同步代码库吗?上面的例子在构造函数中,但它们不需要......将问题推向下一层......
class Foo {
myMethod () {
/* Can I do anything async here */
}
}
或者,用吸气剂...
class Foo {
get myProp() {
/* Is there any case that this is usefully asynchronous */
}
}
我能想到的唯一例子是在同一个方法/构造函数/getter 中并行运行某些东西,但要在结论之前解决整个问题。我只是感到困惑,因为似乎所有对完全异步库的推动,这只会让事情变得混乱。除了教科书示例之外,我找不到任何有用的应用程序。
我可不可以做async constructor()
不,这是一个语法错误 - 就像constructor* ()
。构造函数是一种不返回任何内容的方法(没有承诺,没有生成器),它只初始化实例。
并且,如果不是,构造函数应该如何工作来执行此操作
这样的构造函数根本不应该存在,请参阅让构造函数返回 Promise 是不好的做法吗? https://stackoverflow.com/q/24398699/1048572
ES6 类可以支持对对象状态进行操作的任何形式的异步吗?或者,它们仅适用于纯同步代码库吗?
是的,您可以使用异步方法(即使使用建议的方法)async
语法)在类上,并且 getter 也可以返回 Promise。
但是,您需要决定在某些异步进程仍处于活动状态时调用方法时会发生什么。如果您希望它对所有操作进行排序,您应该将实例的状态存储在您可以链接到的序列末尾的 Promise 中。或者,如果您想允许并行操作,最好的方法是使您的实例不可变并返回另一个实例的承诺。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)