gpt4 book ai didi

javascript - 如何在循环中针对 es6 生成器执行异步任务

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:01 28 4
gpt4 key购买 nike

我了解如何使用生成器使异步代码看起来更漂亮。我有一个简单的生成器 *all,它接受一个 page,将返回一个值。

然后我有另一个生成器 *allDo,它将对第 1 到 30 页使用 *all 并且对于每个结果,执行一些异步 task.

然后我有另一个生成器 *allBatchDo,它将批处理 3 个页面,并执行一些异步 task

function mockPromise(value) {
return Promise(function(resolve, reject) {
resolve(value);
});
}

function *all(page) {
var ls = yield mockPromise("page " + page);
// do all kinds of promises
return yield ls;
};

function *allDo(task) {
var page = 1;
while (true) {
var res = yield * all(page);

res = yield task(res);

if (page == 30) {
break;
}
page++;
}
}

function *allBatchDo(task) {
var page = 1;
var arr = [];
while (true) {
var res = yield * all(author, page);

arr.push(res);
if (arr.length >= 3) {
yield task(arr);
arr = [];
}

if (page == 30) {
break;
}

page++;
}
}

function logTask(res) {
return mockPromise(res).then(function(v) {
console.log(v);
});
}

这些生成器的使用示例如下:

// return a single page promise
async(all(1)).then(function(value) { console.log(value); });

// do `logTask` for all pages 1 thru 30
async(allDo(logTask));

// do `logTask` for all pages with batches of 10
async(allBatchDo(logTask));

问题是,这是对 es6 异步功能的合法使用,还是我的用例有一个抽象的内置解决方案?

最佳答案

如果你想使用生成器进行异步,那么你的代码是有效的。 ES6 只包含对异步操作的 promise 。 ES7 将具有异步/等待。您还可以使用一个好的库:https://github.com/kriskowal/q或仅使用原生 promise Promise.All 而不使用生成器。

关于javascript - 如何在循环中针对 es6 生成器执行异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28260140/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com