1.加载图片
1 2 3 4 5 6 7 8
| const preloadImage = function (path) { return new Promise(function (resolve, reject) { const image = new Image(); image.onload = resolve; image.onerror = reject; image.src = path; }); };
|
2.Generator函数与Promise的结合
Generator 函数与 Promise 的结合
使用 Generator 函数管理流程,遇到异步操作的时候,通常返回一个Promise
对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| function getFoo () { return new Promise(function (resolve, reject){ resolve('foo'); }); }
const g = function* () { try { const foo = yield getFoo(); console.log(foo); } catch (e) { console.log(e); } };
function run (generator) { const it = generator();
function go(result) { if (result.done) return result.value;
return result.value.then(function (value) { return go(it.next(value)); }, function (error) { return go(it.throw(error)); }); }
go(it.next()); }
run(g);
|
上面代码的 Generator 函数g
之中,有一个异步操作getFoo
,它返回的就是一个Promise
对象。函数run
用来处理这个Promise
对象,并调用下一个next
方法。