首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ecmascript 6递归函数

Ecmascript 6递归函数
EN

Stack Overflow用户
提问于 2016-11-24 09:44:27
回答 1查看 1.8K关注 0票数 2

我正在尝试为sequelize.js编写一个基类。这个类将关联所有相关的表。includeFk函数实现了这一任务。但它是有希望的,应该是递归的。班级:

代码语言:javascript
复制
class base {
    constructor(table, depth) {
        this._table = table;
        this._depth = depth;

    }

    includeFK(table, depth, includes) {
        return new Promise((resolve, reject) => {
                if (depth <= this._depth) {
                    for (var att in table.tableAttributes) {

                        table.belongsTo(m, {
                            as: m.name,
                            foreignKey: att
                        })
                        includes.push({
                            model: m
                        });

                    }
                }

                Promise.all(

                    Object.keys(table.associations).forEach(tbl => {
                            this.includeFK(table.associations[tbl].target, depth + 1, includes);
                        }

                    )).then(results => {
                    resolve(true)
                });
            } else {
                resolve(true);
            }
        });



    all(query) {
        return new Promise((resolve, reject) => {
            var tmp = this;
            var includes = [];

            Promise.all([
                this.includeFK(tmp._table, 1, includes),
                this.includeLang()
            ]).then(function() {

                tmp._table.findAll({
                    include: includes
                }).then(function(dbStatus) {
                    resolve(dbStatus);
                });
            });
        });
    }
}

错误:

(节点:25079) UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝id: 3):TypeError:无法读取未定义(节点:25079)的属性“符号(Symbol.iterator)”DeprecationWarning:未处理的承诺拒绝被取消。在未来,承诺不处理的拒绝将使用非零退出代码终止Node.js进程。(节点:25079) UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝id: 4):TypeError:无法读取未定义的属性“符号(Symbol.iterator)”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-24 09:49:39

您有来自Promise.all的句柄错误,因为它还返回一个承诺,并且您需要处理它,除非您将它训练为返回的承诺。

代码语言:javascript
复制
Promise.all([...])
    .then(...)
    .catch(function(err) {
        console.error(err);
        reject(err);
    });

编辑:

代码语言:javascript
复制
var promiseArr = [];

Object.keys(table.associations).forEach(tbl => {
  promiseArr.push(
    self.includeFK(table.associations[tbl].target, depth + 1, includes)
  );
});

Promise.all(promiseArr)
  .then(results => {
    resolve(true)
  });

我还认为您的this绑定不在正确的范围内。如果得到未定义函数的错误,请在调用类函数之前尝试使用变量引用this

示例:

代码语言:javascript
复制
includeFK(table, depth, includes) {
    var self = this; //ref this and use it later
  ...
      ...
           self.includeFK();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40782800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档