我们如何await
使用外部 javascript 库在浏览器中使用 javascript 运算符?
例如,如果我们有以下 html 代码:
<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='awesome.lib.js'></script>
<script type='text/javascript'>
async function slow() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
console.log("slow finished");
resolve();
}, 3000);
});
}
function fast() {
console.log("fast");
}
async function run() {
await slow();
fast();
}
run();
</script>
</head>
<body>
</body>
</html>
我们可以使用哪些库(awesome.lib.js
这些库在哪里)将 await 运算符带到浏览器?我们如何编写一个工作示例?
我知道我们可以转换代码,但我正在寻找一个聪明的解决方案,我们可以添加一个第三方库,瞧,它可以工作!
如果我们使用 Google Traceur Transpiler,我们可以转译代码 ( http://jsfiddle.net/msfrisbie/yk6r7gxr/ ) 并获得如下所示的代码。但问题是我们需要先转译代码。另一件事是我想避免使用一些不是 javascript 之类的东西<script type='text/whatevernotjavascript'>...code...code</script>
。我们应该怎么做?这将是非常棒的,实用和救世主。
<script type="text/javscript">
$traceurRuntime.ModuleStore.getAnonymousModule(function(require) {
"use strict";
var $__1 = $traceurRuntime.initTailRecursiveFunction(slow),
$__3 = $traceurRuntime.initTailRecursiveFunction(run);
function slow() {
return $traceurRuntime.call(function() {
return $traceurRuntime.continuation($traceurRuntime.asyncWrap, $traceurRuntime, [$traceurRuntime.initTailRecursiveFunction(function($ctx) {
return $traceurRuntime.call(function($ctx) {
while (true)
switch ($ctx.state) {
case 0:
$ctx.returnValue = new Promise(function(resolve, reject) {
setTimeout(function() {
console.log("slow finished");
resolve();
}, 3000);
});
$ctx.state = 2;
break;
case 2:
$ctx.state = -2;
break;
default:
return $traceurRuntime.continuation($ctx.end, $ctx, []);
}
}, this, arguments);
}), this]);
}, this, arguments);
}
function fast() {
console.log("fast");
}
function run() {
return $traceurRuntime.call(function() {
return $traceurRuntime.continuation($traceurRuntime.asyncWrap, $traceurRuntime, [$traceurRuntime.initTailRecursiveFunction(function($ctx) {
return $traceurRuntime.call(function($ctx) {
while (true)
switch ($ctx.state) {
case 0:
Promise.resolve(slow()).then($ctx.createCallback(2), $ctx.errback);
return;
case 2:
fast();
$ctx.state = -2;
break;
default:
return $traceurRuntime.continuation($ctx.end, $ctx, []);
}
}, this, arguments);
}), this]);
}, this, arguments);
}
run();
return {};
});
//# sourceURL=traceured.js