node.js - Sequelize find 没有成功功能

标签 node.js sequelize.js

我有以下代码:

app.get('/autocompleteEmployees', function(req, res){
    var term = req.param('term');
    model.Employee.findAll().success(function(employees){
        var responseData = [];
        for(var i=0; i<employees.length; i++){
            console.log('i: ' + i);
            model.Person.find(employees[i].personID).success(function(person){
                if((person.lastName + ', ' + person.firstName).toLower().indexOf(term.toLower()) > -1){
                    responseData.push({
                        label: person.lastName + ', ' + person.firstName,
                        value: employees[i].id
                    });
                }

                if(i + 1 == employees.length){
                    res.send(JSON.stringify(repsonseData));
                }
            });
        }
    });
});

调用 GET/autocompleteEmployees 路由后,我收到以下错误:
C:\Users\lowerkey\Desktop\emasc\server\controllers\Employee.js:85
                                model.Person.find(employees[i].personID).success (function(person){
                                             ^ TypeError: Object [object Object] has no method 'success'
    at [object Object].<anonymous> (C:\Users\lowerkey\Desktop\emasc\server\contr ollers\Employee.js:85:46)
    at [object Object].emit (events.js:67:17)
    at [object Object].<anonymous> (C:\Users\lowerkey\Desktop\emasc\node_modules \sequelize\lib\query-interface.js:245:17)
    at [object Object].emit (events.js:88:20)
    at [object Object].<anonymous> (C:\Users\lowerkey\Desktop\emasc\node_modules \sequelize\lib\dialects\mysql\query.js:78:10)
    at C:\Users\lowerkey\Desktop\emasc\node_modules\sequelize\lib\dialects\mysql \query.js:32:51
    at Query.<anonymous> (C:\Users\lowerkey\Desktop\emasc\node_modules\sequelize \node_modules\mysql\lib\client.js:108:11)
    at Query.emit (events.js:64:17)
    at Query._handlePacket (C:\Users\lowerkey\Desktop\emasc\node_modules\sequeli ze\node_modules\mysql\lib\query.js:51:14)
    at Client._handlePacket (C:\Users\lowerkey\Desktop\emasc\node_modules\sequel ize\node_modules\mysql\lib\client.js:312:14)

我该怎么做才能摆脱错误?

最佳答案

事实证明,人们并不是简单地将 for 循环与异步代码混合在一起。

对于那些和我走相同道路的人来说,解决方案是这样的:

    Array.prototype.foreach = function( callback ) {
  for( var k=0; k<this .length; k++ ) {
    callback( k, this[ k ] );
  }
}

app.get('/autocompletePersonEmployees', function(req, res){
    console.log('/autocompleteEmployees');

    var term = req.param('term', null);
    if(term == null){
        model.Employee.findAll().success(function(employees){
            var responseData = [];
            employees.foreach(function(i, employee){
                console.log(i + ' ' + employee.toString());
                model.Person.find(employee.personID).success(function(person){
                    responseData.push({
                        label: person.lastName + ', ' + person.firstName,
                        value: employee.id
                    });

                    if(i+1 == employees.length){
                        res.send(JSON.stringify(responseData));
                    }
                });
            });
        });
    }
    });

关于node.js - Sequelize find 没有成功功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650951/

相关文章:

javascript - 是否可以使用 Chrome 扩展在浏览器上运行 Node.js 模块

sql - 使用 NodeJS 应用程序的 Sequelize 函数在 PostgreSQL 中实现两级聚合

javascript - 使用 .then() 查询后,Sequelize 无法分配数据

mysql - 如何从表 2 创建总和并显示数据表 1 和表 2

javascript - 在注册过程中从外部 API 验证用户名匹配

angularjs - 使用 Angular http 在 Ionic 中发送 http 请求

javascript - 了解 Gulp 管道顺序

node.js - 为什么 req.body 在 POSTMAN 中返回 undefined

node.js - 我想通过 sequelize 更改表的列名

mysql - 如何构建需要复杂连接的 Sequelize.js 架构?