У меня есть программа, которая в зависимости от размера массива, который отправляется из внешнего интерфейса, затем я должен пройти через вызов knex для базы данных, а затем вернуть эти значения во внешний интерфейс.
Я попробовал то, что некоторые другие люди предложили использовать Promise.all () и функцию map (), например:
const req=Json.parse(datafromFE)
const neededvar={
result1="",
result2=[]
}
var call1=knex.select('field1').from('Table1').then(result=>{neededvar.result1=result});
function getData(current,i,knex){
knex.select('data').from('table').where('data','=',current.field)
.then((result)=>{
neededvar.result2[i]=result*neededvar.result1
return(neededvar.result2)
})
}
Promise.all([call1,req.map((current,i)=>{getData(current,i,knex)}])
.then((values)=>{
console.log(values)
e.returnValue=neededvar//using electron ipcRenderer I believe is similar to
//vanilla nodejs backend res.json('placedatahere')
//so just think about
//res.json(neededvar)
})
, однако, когда я запускаю вызов, console.log (values) возвращает неопределенное значение длякарта массива вызывает, но не для первого вызова knex, как здесь:
console.log(neededvar)
//[result1,undefined,undefined...]
Я пытался проверить, является ли мой вызов knex моим, просто вызывая функцию call1 внутри карты, но все еще возвращает неопределенное значение.
var call1=knex.select('field1').from('Table1')
Promise.all(req.map((current,i)=>{call1}).then((result)=>{
console.log(result)
})
//output:[undefined,...,undefined]
Я мог бы просто вызывать API из интерфейса несколько раз, но я просто уверен, что это был бы самый эффективный способ. Если есть какие-либо рекомендации, которые я могу дать, я был бы очень признателен
------- Редактировать -------
Не забудьте добавить все возвраты ко всем функциям
function getData(current,i,knex){
knex.select('data').from('table').where('data','=',current.field)
.then((result)=>{
neededvar.result2[i]=result*neededvar.result1
return(neededvar.result2)
})
}
действительно должно быть
function getData(current,i,knex){
return(knex.select('data').from('table').where('data','=',current.field)
.then((result)=>{
neededvar.result2[i]=result*neededvar.result1
return(neededvar.result2)
}))
}
то же самоеДругой звонок knex