gos*_*oy5 1 javascript dom asynchronous promise dart
我想创建一个返回未来的函数。值将在特定时间解析。但是,该值必须从回调内部解析。在 Javascript 中,我可以做这样的事情:
function delay(seconds) {
return new Promise((resolve, reject) => {
setTimeout(resolve, seconds * 1000);
});
}
Run Code Online (Sandbox Code Playgroud)
我在 Dart 中没有看到任何明确的解决方案,有人可以告诉我一种方法来做到这一点(或解决这个问题的方法)吗?如果您需要任何澄清,请随时提出评论。
编辑:为了更清楚,我将提供我创建的上下文和源代码。
我正在尝试创建一个在元素发生单个事件后返回的函数(实际上是方法)。我首先用 Javascript 写的 -
HTMLElement.prototype.on = function(eventName) {
return new Promise(function(resolve, reject) {
var handler = function(event) {
resolve(null);
this.removeEventListener(eventName, handler);
};
this.addEventListener(eventName, handler);
});
};
Run Code Online (Sandbox Code Playgroud)
你可以这样使用它await myButton.on("click"); alert("Button clicked first time");:
为了玩转,我尝试在 Dart + HTML 中重新创建它,这是到目前为止的代码。
import "dart:html";
extension on HtmlElement {
on(String name) {
void handler(Event event) {
removeEventListener(name, handler);
// Do something to actually return from the method...
}
addEventListener(name, handler);
}
}
void main() {}
Run Code Online (Sandbox Code Playgroud)
编辑:对于好奇的人,可以在此处或此处找到完整的代码 。
jam*_*lin 11
我不熟悉 JavaScript Promise,但假设您只想在函数至少执行一次await myButton.on("click")后完成,您可以使用:handlerCompleter
import "dart:async";
import "dart:html";
extension on HtmlElement {
Future<void> on(String name) {
final completer = Completer<void>();
void handler(Event event) {
removeEventListener(name, handler);
completer.complete();
}
addEventListener(name, handler);
return completer.future;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |