js代码实现 并发执行一个函数
时间: 2024-05-02 12:16:11 浏览: 8
可以使用 JavaScript 中的 Promise 和 async/await 实现并发执行一个函数。下面是一个示例代码:
```javascript
function doSomething() {
return new Promise(resolve => {
setTimeout(() => {
console.log('Done!');
resolve();
}, Math.random() * 2000);
});
}
async function runParallel() {
const tasks = [];
// 添加多个并发任务
for (let i = 0; i < 5; i++) {
tasks.push(doSomething());
}
// 等待所有任务完成
await Promise.all(tasks);
console.log('All done!');
}
runParallel();
```
上述代码中,我们定义了一个 `doSomething` 函数,它返回一个 Promise 对象,模拟一个异步任务。然后,我们使用 `async/await` 定义了一个 `runParallel` 函数,在其中添加了多个并发任务,并使用 `Promise.all` 等待所有任务完成。最后,我们打印出所有任务完成的消息。
相关问题
vue 并发的执行一个函数
如果你想在 Vue 中并发地执行一个函数,可以考虑使用 JavaScript 的 Promise 和 async/await。
首先,将要并发执行的函数包装在一个 Promise 中。例如:
```
function myFunction() {
return new Promise(resolve => {
// 执行一些操作
resolve(result);
});
}
```
然后,创建一个 async 函数,使用 Promise.all() 方法并发地执行多个 Promise。例如:
```
async function runFunctions() {
const results = await Promise.all([
myFunction(),
myFunction(),
myFunction()
]);
// 处理结果
}
```
在上面的例子中,我们执行了三个 myFunction() 函数,并使用 Promise.all() 等待所有函数完成。当所有函数都完成后,结果将被传递给 results 数组。
使用 async/await 和 Promise.all() 可以方便地并发执行多个函数,并且代码也相对简单易懂。
写个解决并发数的js代码
以下是一个使用JavaScript解决并发数的示例代码:
```javascript
class ConcurrentLimit {
constructor(limit) {
this.limit = limit;
this.running = 0;
this.queue = [];
}
run(fn) {
if (this.running < this.limit) {
this.running++;
fn().then(() => {
this.running--;
this.next();
});
} else {
this.queue.push(fn);
}
}
next() {
if (this.running < this.limit && this.queue.length > 0) {
this.running++;
const fn = this.queue.shift();
fn().then(() => {
this.running--;
this.next();
});
}
}
}
```
该代码定义了一个 `ConcurrentLimit` 类,可以限制同时执行的异步函数的数量。它使用两个变量 `limit` 和 `running` 来跟踪限制的并发数和当前正在运行的任务数,并使用一个队列 `queue` 存储等待执行的任务。
当调用 `run(fn)` 方法时,如果当前正在运行的任务数小于限制数,将立即运行传入的函数 `fn`。如果当前正在运行的任务数达到限制数,则将任务添加到队列中等待执行。
当一个任务完成时,`next()` 方法将从队列中取出下一个任务并执行,直到达到限制数或队列为空为止。
使用示例:
```javascript
const limit = new ConcurrentLimit(3);
function delay(time) {
return new Promise(resolve => {
setTimeout(resolve, time);
});
}
function task() {
console.log('start task');
return delay(1000).then(() => {
console.log('finish task');
});
}
limit.run(task);
limit.run(task);
limit.run(task);
limit.run(task);
limit.run(task);
```
在上面的示例中,我们创建了一个 `ConcurrentLimit` 实例,并将限制数设置为 `3`。然后,我们定义了一个 `delay()` 函数,它将在给定的时间后返回一个解决的 Promise。接下来,我们定义了一个 `task()` 函数,它在控制台输出一条消息,并在1秒后完成。
最后,我们使用 `limit.run()` 方法将 `task()` 函数添加到队列中。由于限制数为 `3`,因此前三个任务将立即执行,而后两个任务将在前面的任务完成后执行。在控制台上运行该示例将输出以下内容:
```
start task
start task
start task
finish task
finish task
finish task
start task
finish task
start task
finish task
```
这证明了我们的代码成功限制了同时运行的任务数。