我一直在介绍ML网站上的JS->原因作弊表。它们非常有帮助,但没有人涵盖现代ES。
中可用的async
/await
语法ML等效的原因是什么?
import fs from 'mz/fs';
// A cat-like utility
const main = async () => {
if (process.argv.length != 3) {
throw new Error('Expected a file-path');
}
const path = process.argv[2];
const content = await fs.readFile(path);
console.log(content.toString());
};
main().catch(error => console.error(error));
推理文档说:
注意:将来我们可能会为JS承诺(异步/等待(提供专用语法。
这意味着它当前不支持异步/等待。
当前(2018年10月(一个"语法提案:async/ategait"拉请"拉请"请求打开,以实施该请求,该请求已开放约15个月。去年年底,其中一位开发人员撰写了一篇有关他们计划的博客文章,并指出处理一些JavaScript Promise怪癖的一些问题。从博客文章中,甚至有一个示例GitHub回购,并支持异步语法,看起来像这样:
let getThing = () => Js.Promise.make((~resolve, ~reject) => [@bs]resolve(20));
let getOtherThing = () => Js.Promise.make((~resolve, ~reject) => [@bs]resolve(40));
let module Let_syntax = Reason_async.Promise;
let doSomething = () => {
/* These two will be awaited concurrently (with Promise.all) */
[%await let x = Js.Promise.resolve(10)
and y = getThing()];
[%awaitWrap let z = getOtherThing()];
x + y + z + 3
};
/* Heyy look we have top-level await!
* `consume` means "give me this promise, and have the result
* of this whole expression be ()" */
{
[%consume let result = doSomething()];
Js.log(result)
};
如果您喜欢Reasonml但想要异步功能,请查看OCAML。他们有一些语法差异,但否则非常相似。理由甚至使用Ocaml的编译器,基本上是OCAML,带有牙套,以使JavaScript开发人员不太害怕。OCAML使用两个异步库:LWT和Jane Street的异步。