我如何创建一个“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返回之前。
答案 0 :(得分:0)
虽然可以在ES6中完成,但它不一定非常方便。但是有一些blog posts关于它,跟随它们应该非常简单。
针对ES7提出async/await
提案。 Babel已经支持。
请注意,async/await
只是处理承诺的语法糖。声明为异步的函数总是返回一个promise,因此在顶层你仍然需要使用promise API。 await
只能在async
函数中使用,但可以等待任何返回promise的内容。
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));
请记住,这是一项实验性功能,其工作方式可能会随着时间的推移而发生变化。