首页 > 解决方案 > 节点js中的异步等待函数返回空白数组问题

问题描述

sessionFilter.js

'use strict';
const knex = require('../config/database')

class SessionFilter{
    async setPermissionFilterArray(data){
        return new Promise(async (resolve, reject) => {
            try { 
                const sql_data = await knex.select(knex.raw(sql));
                var all_permission = []; 
                sql_data.forEach(function(val) {
                    if (all_permission[val.event_ref] === undefined) all_permission[val.event_ref] = [];
                    if (all_permission[val.event_ref][val.event_slug] === undefined) all_permission[val.event_ref][val.event_slug] = [];
                    all_permission[val.event_ref][val.event_slug][val.event_slug_key] = {
                        permission:val.permission,
                        no_permission:val.no_permission,
                        sql_where_clause:val.sql_where_clause
                    }
                });
                resolve(all_permission);
            } catch (error) {
                reject(error.message);
            }
        })
    }
}   
module.exports = SessionFilter;

服务器.js

const filter = new SessionFilter();
const set_permission_filter_array = await filter.testFunction(data);
console.log(set_permission_filter_array);
return res.json(set_permission_filter_array);

当我控制台 set_permission_filter_array 变量很好地显示数据但当我返回 set_permission_filter_array 变量在前端显示空白数组时。我怎样才能得到数据?请帮我。

标签: node.js

解决方案


由于 async 关键字,您的函数将自动返回一个承诺。这个承诺将在return all_permission;声明中得到解决。

class SessionFilter{
   async setPermissionFilterArray(data){        
       try { 
           //don't know were this sql var comes from
           const sql_data = await knex.select(knex.raw(sql));             
           var all_permission = []; 
           sql_data.forEach((val) => { 
               ... 
           });
           return all_permission;
       } catch (error) {
           throw error;
       }        
   }
}   

然后你可以使用 async await 关键字得到你的承诺结果,如下所示:

const set_permission_filter_array = await setPermissionFilterArray(data);

推荐阅读