<script>
function run(generator) {
var 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());
}
function getFoo() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('foo');
}, 5000)
})
}
run(function* () {
try {
var foo = yield getFoo();
console.log(foo);
} catch (e) {
console.log(e);
}
});
</script>
相同的功能 asyn 函数实现
<script>
function getFoo() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve('foo');
}, 5000)
})
}
async function run() {
try {
var foo = await getFoo();
console.log(foo);
} catch (e) {
console.log(e);
}
};
run()
</script>
分享到:
相关推荐
Bluebird是一个高性能、全面特性的Promise库,而`co`库则是一种将Generator函数和Promise结合使用的工具,它使得异步代码可以以同步的方式编写,极大地提升了代码的可读性和可维护性。 在前端开发中,异步操作是必...
此外,当与`async/await`语法结合使用时,Generator函数可以实现更简洁的异步编程风格: ```javascript async function asyncJobs() { const fileAContent = await readFile(fileA); const fileBContent = await ...
在`cojs`库中,它将Generator函数和Promise结合,使得在Generator函数中可以方便地处理异步操作。例如,当Generator函数遇到一个`yield`表达式并其后面是一个Promise对象时,`cojs`会等待Promise解析,然后将结果...
5. **结合Promise和Generator** - Generator可以和Promise无缝集成,`yield`可以等待Promise的结果。 - 示例: ```javascript function someAsyncTask() { return new Promise((resolve, reject) => { ...
在Node.js中,Generator还可以用于实现轻量级的并发控制,通过控制Generator函数的执行来管理不同任务的执行顺序和状态。 为了使用Generator函数,需要在函数声明时使用星号(*)来标识这是一个Generator函数。在...
Generator函数通过`function*`定义,使用`yield`关键字来暂停执行,并且可以接收外部传递的值。例如: ```javascript function* myGenerator() { let result = yield fetch('http://example.com'); console.log...
在JavaScript中,异步编程是处理I/O操作(如AJAX请求)的关键,因为它允许...此外,配合使用`co`库或其他Promise包装器,可以进一步简化Generator函数的使用。这使得在JavaScript中实现同步风格的异步编程成为可能。
在实际应用中,Generator函数经常与`for...of`循环结合,或者与`async/await`语法一起使用,来处理异步操作,比如文件读写、网络请求等。通过这种方式,我们可以将复杂的异步逻辑转换为同步风格的代码,使得代码更...
本文实例讲述了ES6 Generator函数的应用。分享给大家供大家参考,具体如下: Generator 函数是 一种异步编程解决方案,Generator 函数会返回一个遍历器对象,Generator 函数是一个普通函数,但是有两个特征。一是,...
JavaScript 的 Generator 是 ES6 引入的一种新的数据类型,它提供了一种创建迭代器(iterator)的机制,允许函数保存执行状态并能暂停和恢复执行。Generator 函数由 `function*` 关键字定义,其中的 `*` 表明这是一...
Generator函数还可以与`for...of`循环结合,处理遍历操作,例如遍历数组、Map或Set等可迭代对象。此外,它与`async/await`语法协同工作,使得异步编程变得更加简洁和易读。 总的来说,Generator函数在JavaScript中...
2. **co 模块**:co是TJ Holowaychuk开发的一个流行的库,它将Generator函数与Promise结合,提供了优雅的异步编程方式。co通过包装Generator函数,将它们转化为返回Promise的对象,进而可以使用`.then()`方法处理...
Generator函数与Promise结合使用时,可以实现更复杂的异步控制流。例如,我们可以通过`yield`一个Promise,然后在Promise解析或拒绝后继续执行Generator函数。这种方式被称为“协程”,它使得异步代码看起来更像同步...
`co`库结合了Generator函数和Promise/Thunk的优势,使得我们可以使用Generator函数来编写异步代码,而无需关心底层的Promise或Thunk处理。当Generator函数中的`yield`表达式返回一个Promise时,`co`会自动处理...
Generator函数的一个重要应用场景是配合`for...of`循环和`async/await`进行异步编程。例如,我们可以使用Generator函数来实现一个简单的异步任务队列: ```javascript function asyncQueue(generator) { function ...
由于yield可以返回Promise对象,所以可以通过Promise的then方法来处理异步结果,并在异步操作成功完成后继续执行Generator函数。 对于单个异步任务,文档给出一个例子,使用node-fetch模块来发起网络请求。通过...