如何使用ES6承诺内联/顺序加载xmlHttpRequest资源&发电机?

时间:2015-06-12 23:31:50

标签: xmlhttprequest generator ecmascript-6 yield

我如何创建一个“data = xhrLoad(url)”函数,该函数内部是异步但没有.then或回调“hell”?我希望xhrLoad做Promise / Generator魔术,但只有在数据可用时才返回。

示例:

data = initMyProgram(); // may call data = xhrLoad(url)
<use data here>
<more inline code here>

我意识到Promise很精彩,然后.then / .catch很复杂..但是我想要内联的顺序代码......如果没有外部资源可以获得数据,那么甚至可能不需要代码片段

Ex:在webgl编程中,着色器可以在<scripts>,外部文件,es6模块,es6模板字符串等中。我想通过xhr请求来管理它,如果需要,可以神奇地完成在initMyProgram返回之前。

1 个答案:

答案 0 :(得分:0)

虽然可以在ES6中完成,但它不一定非常方便。但是有一些blog posts关于它,跟随它们应该非常简单。

针对ES7提出async/await提案。 Babel已经支持。

请注意,async/await只是处理承诺的语法糖。声明为异步的函数总是返回一个promise,因此在顶层你仍然需要使用promise API。 await只能在async函数中使用,但可以等待任何返回promise的内容。

Example

function foo() {
  return new Promise(resolve => {
    setTimeout(() => resolve(42), 3000);
 });
}

async function bar() {
  let answer = await foo();
  console.log(answer);
  return answer * 2;
}

bar().then(result => console.log(result));

请记住,这是一项实验性功能,其工作方式可能会随着时间的推移而发生变化。