JavaScript Generator 和 Promise 使异步变同步
JavaScript Generator 和 Promise 使异步变同步
Generator
function* gen() {
yield console.log(1)
yield console.log(2)
console.log(3)
}
const g = gen()
g.next()
g.next()
g.next()
// 输出
// 1
// 2
// 3
Promise
function delay(ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms);
});
}
console.log(1)
delay(300).then(() => console.log(2))
console.log(3)
// 输出
// 1
// 3
// 2
Generator + Promise
function* gen() {
const data = yield new Promise((resolve, reject)=>{
setTimeout(function(){
resolve({a:1,b:2});
},1000);
});
console.log(data)
}
const g = gen();
const {value} = g.next();
// 判断 Promise
if(value instanceof Promise){
value.then(data=>{
// 执行 next 传递 data (next 可改成 send)
g.next(data);
});
}
// 输出
{a: 1, b: 2}