gpt4 book ai didi

javascript - 如何等到async.forEachOf完成,然后将结果发送给客户端?

转载 作者:行者123 更新时间:2023-12-02 23:31:29 25 4
gpt4 key购买 nike

我有一个/get 路由,可以从数据库获取一些数据并将其发送给用户。问题是我使用了两个带有 async.forEachOf 语句的函数。我不知道如何等到第二个 async.forEachof 完成然后将整个结果发送回用户。

我认为我需要使用 Promise 或类似的东西,但我无法管理如何在我的函数中使用它。有人可以帮我吗,这已经困扰我两天了。谢谢您,祝您有美好的一天。

这些是功能:

function getSetsFromWorkout(workouts) {
const selectSetsQuery = "SELECT id, set_number, workoutFKEY FROM sets WHERE workoutFKEY = ?"

async.forEachOf(workouts, function (workout, key, callback) {
const workoutId = workout.id
getConnection().query(selectSetsQuery, [workoutId], (err, setsRows, result) => {
if (err) {
console.log("Failed to query for users: "+ err)
res.sendStatus(500)
res.end()
} else {
workout["sets"] = setsRows
getExercisesFromSets(workout)
}
callback()
});
}, function (err) {
if (err) console.log(err.message);
});
};

function getExercisesFromSets(sets) {
const selectExercisesQuery = "SELECT id, ex_time, type, ex_id FROM user_exercises WHERE setsFKEY = ?"

const allSets = sets["sets"]

async.forEachOf(allSets, function (set, key, callback) {
const setId = set.id
getConnection().query(selectExercisesQuery,[setId], (err, exercisesRows, result)=> {
if (err) {
console.log("Failed to query for users: "+ err)
res.sendStatus(500)
res.end()
} else {
console.log("add exercise")
set["exercises"] = exercisesRows
callback()
}
});

}, function(err) {
if (err) console.log(err.message)
console.log("ENDED")
console.log(sets)
});
};

这是基于console.log()语句的输出。结果是我需要的,但我不知道如何在 forEachOf 循环完成后发送它。

如果我将 res.json(sets) 放在这里,它只会将 forEachOf 的第一次迭代发送回客户端,然后它将停止。

function(err) {
if (err) console.log(err.message)
console.log("ENDED")
console.log(sets)
**res.json(sets)**
});
};

我需要等待所有迭代完成,然后将数据发送到 sclient。

add exercise
add exercise
add exercise
ENDED

//MY data from db

add exercise
ENDED
// My other set of data from db

最佳答案

我认为您可以创建一个由 async.forEach 回调调用的函数和一个变量来检查两个进程是否已结束(例如,可能是一些不同的方法来获得相同的结果)结果)。像这样的事情:

var ended = { array1: false, array2: false };
const dataToReturn = {};

const array1 = [];
async.forEachOf(array1, function (item, key, callback) {
// do stuff
dataToReturn.array1 = "first data";
callback();
}, function (err) {
if (err) console.log(err.message);
else {
ended.array1 = true;
endProcess();
}
});

const array2 = [];
async.forEachOf(array2, function (item, key, callback) {
// do stuff
dataToReturn.array2 = "first data";
callback();
}, function (err) {
if (err) console.log(err.message);
else {
ended.array2 = true;
endProcess();
}
});

function endProcess() {
if (!ended.array1 || !ended.array2) return;
res.json(dataToReturn);
}

关于javascript - 如何等到async.forEachOf完成,然后将结果发送给客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56479476/

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