gpt4 book ai didi

JavaScript 多个函数的顺序执行

转载 作者:行者123 更新时间:2023-12-02 21:41:42 25 4
gpt4 key购买 nike

我(从昨天起第一次使用 JavaScript)设法让 JavaScript 按顺序执行顺序运行函数(参见下面的代码)(归功于 @CertainPerformance)。我需要在多个 SlowFunction 中使用 fastFunction。当前的解决方案对我来说似乎并不 DRY(不要重复),同时它不能保证 SlowFunction1 和 SlowFunction2 的执行顺序。 JavaScript 中这个问题的 DRY 解决方案是什么?我可以通过某些配置强制 JavaScript 始终以顺序模式运行吗?对我来说,使用嵌套回调似乎不是最明智的解决方案。

function fastFunction(message) {
console.log(message);
}

function slowFunction1(callback, message) {
setTimeout(() => {
console.log('slowFunction1!');
callback(message);
}, 10000);
}

function slowFunction2(callback, message) {
setTimeout(() => {
console.log('slowFunction2!');
callback(message);
}, 1000);
}

slowFunction1(fastFunction, 'fast_Function');
slowFunction2(fastFunction, 'fast_Function');

最佳答案

使用 async/await,您可以按如下方式对异步任务进行排序:

// Very handy utility function to get a promise that resolves after a given delay
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

function fastFunction(message) {
console.log(message);
}

async function slowFunction1(callback, message) {
console.log('slowFunction1!');
await delay(2000); // two seconds
callback(message);
}

async function slowFunction2(callback, message) {
console.log('slowFunction2!');
await delay(1000); // one second
callback(message);
}

(async function() {
// Put all your logic here, and await promises...
await slowFunction1(fastFunction, 'fast_Function');
await slowFunction2(fastFunction, 'fast_Function');
})(); // execute immediately

现在,您将在另一个完成后发生延迟,因此(大约)总执行时间为 2+1=3 秒。

这模仿了您所拥有的大部分模式,但是一旦您使用了 Promise,您就不再需要回调模式,并且可以这样做:

// Very handy utility function to get a promise that resolves after a given delay
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

function fastFunction(message) {
console.log(message);
}

(async function() {
console.log('slow part 1');
await delay(2000); // two seconds
fastFunction('fast_function');
console.log('slow part 2');
await delay(1000); // one second
fastFunction('fast_function');
})(); // execute immediately

关于JavaScript 多个函数的顺序执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60350766/

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