рекурсивный запрос узла mysql - PullRequest
0 голосов
/ 04 октября 2018

Я хочу выполнить рекурсивную функцию, которая извлекает данные из БД.В php приведенный ниже код работает как талисман с 15 мс для выполнения

function GetSubCategories($catno,&$subcats, $useactive=true){
   global $dbconn;

   $qid = new SSQL($dbconn, "SELECT categoryno FROM article_category WHERE parent = '$catno'".($useactive?" AND active = 'Y'":"")." ORDER BY sortorder");
   if ($qid->query()){
      while($catrow=$qid->fetch_array()){
        $subcats[]=$catrow["categoryno"];
        GetSubCategories($catrow["categoryno"],$subcats, $useactive);
      }
    }

}

Я новичок в среде nodejs и Async вызывает проблемы в этом случае.Если я напишу тот же коэффициент в js, программа завершится после первой итерации.Я могу синхронизировать процесс с ожиданием, но время выполнения взорвется ...

Я пытаюсь сделать много вещей с обещанием, например

var getSubcategoriestest = function(categoryno,subcats, useactive=true){
return new Promise(async function (resolve) {
    const query = `SELECT categoryno FROM article_category WHERE ?? = ? ${useactive?" AND active = 'Y'":""} ORDER BY sortorder`
    let rows = await mysqlConn.query(query,['parent',categoryno])
    resolve(rows)
}).then((rows)=>{
    for (row of rows){
        console.log(row.categoryno)
        return new Promise(async function (resolve) {
            await getSubcategoriestest(row.categoryno,subcats, useactive)
            resolve()
        }).then(()=>{console.log('end')})
    } 
})

}

, но ничего не работает нормально

Любой гуру может мне помочь?

Спасибо

Джереми


Я проверяю этот код

var getSubcategoriestest = async function(categoryno,subcats, useactive=true,arrPromise=[]){

let promise = new Promise(function (resolve,reject) {
    const query = `SELECT categoryno FROM article_category WHERE ?? = ? ${useactive?" AND active = 'Y'":""} ORDER BY sortorder`
    mysqlConn.query(query,['parent',categoryno]).then((rows)=>resolve(rows)).catch(err=>console.log(err))
}).then((rows)=>{
        for (row of rows){
            getSubcategoriestest(row.categoryno,subcats, useactive,arrPromise).then((rows)=>{subcats.push(row.categoryno)})
        }
        return row.categoryno

}) 

arrPromise.push(promise)

Promise.all(arrPromise).then(function() {
    console.log("promise all,") 
    return 
}).catch(err=>console.log(err))

}

но функция завершается всегда после первой итерации.Promise.all это вызывать много раз (я полагаю, связывать на каждой итерации) ... головная боль, головная боль, головная боль

1 Ответ

0 голосов
/ 08 октября 2018

Здесь мы идем

var getSubcategoriestest = function (categoryno,subcats) {

   const query = `SELECT c FROM ac WHERE ?? = ? ORDER BY sortorder`

   return mysqlConn.query(query,['parent',categoryno]).then(rows => {   
        return Promise.all(rows.map(row => {
            subcats.push(row.categoryno);
            return getSubcategoriestest(row.categoryno, subcats,useactive);
        }));
   })}

rows.map составляют массив обещаний, потому что getSubcategoriestest возвращает обещание.Вы можете добавить потом после обещания. Все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...