Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS Express路由在呈现的路由中返回异步数据_Javascript_Mysql_Node.js_Asynchronous_Pug - Fatal编程技术网

Javascript NodeJS Express路由在呈现的路由中返回异步数据

Javascript NodeJS Express路由在呈现的路由中返回异步数据,javascript,mysql,node.js,asynchronous,pug,Javascript,Mysql,Node.js,Asynchronous,Pug,我试图通过将一些异步函数传递到渲染中,使一些渲染页面更智能,如下所示: var functions = { paginatedCategory: function(category) { db.query(`SELECT * FROM content WHERE FIND_IN_SET(Category, "${category}") ORDER BY position`, function(error, results) { console.log(resu

我试图通过将一些异步函数传递到渲染中,使一些渲染页面更智能,如下所示:

var functions = {
    paginatedCategory: function(category) {
      db.query(`SELECT * FROM content WHERE FIND_IN_SET(Category, "${category}") ORDER BY position`, function(error, results) {
        console.log(results, 'results');
        return results;
      })
    }
}
ul
    each val in paginatedCategory('Products')
        li=val
然后在路线上我会这样做:

res.render('category', functions);
在category.pug页面中,我调用了里面的函数,如下所示:

var functions = {
    paginatedCategory: function(category) {
      db.query(`SELECT * FROM content WHERE FIND_IN_SET(Category, "${category}") ORDER BY position`, function(error, results) {
        console.log(results, 'results');
        return results;
      })
    }
}
ul
    each val in paginatedCategory('Products')
        li=val
在控制台中,它会输出该类别中所有正确的项,但是呈现不会呈现任何内容,我猜这是因为MySQL数据库查询是异步的,所以它会在提取所有项之前呈现页面,您会如何处理这种情况


另外,我希望能够直接从.pug文件传递参数,因为它会随着文件的变化而变化。

通常,处理方法是首先获取所有异步数据,将其放入数据结构中,一旦获得所有数据,然后调用res.render并将收集的数据传递给它


你可以在本文中看到这样一个例子:。

如果大量数据导致负载成为问题,你知道另一种方法吗?@Walter-我建议你问自己的问题,并提供更多具体细节,也许我们可以提供帮助。