sails.js:新创建的记录不会在页面上填充,直到刷新

时间:2014-12-13 15:04:05

标签: javascript node.js orm model sails.js

我有一个小应用程序,我在原型设置(我在帆上很新),在列表中有一个任务。简单的东西。但是,当我创建任务并在创建后转发到列表时,任务不会出现在我的列表中。如果我刷页面就行了。

以下是代码段:

在任务 - >创建

List.findOne(req.session.List.id)
        .exec(function foundTasks (err, list) {
    Task.find({where: { list: list.id }, limit: 1, sort: 'priority desc'})
            .exec(function getTaskPriority (err, task) {
            if (err) {
                console.log(err);
                req.session.flash = {
                    err: err
                }
            }

            list.tasks.add({name: req.param('name'), list: req.session.List.id});

            list.save(function(err) {});
        }); 

        res.redirect('/list/show/'+req.session.List.id);
    });
});

在列表 - >显示

show: function(req, res, next) {
    List.findOne(req.param('id'))
        .populate('tasks')
        .exec(function foundTasks (err, r) {

        req.session.List = r;

        if (err) return next(err);
        res.view({
            name: r.name,
            tasks: r ? r.tasks : []
        });
    });
},

当我创建普通项目时,这不会发生,只能通过.add()功能创建项目。它也发生在我的代码中的其他地方(我有多个上下文添加)。

使用此代码,如果我创建任务"执行此操作1",我将被重定向到我的任务列表并且"执行此操作1"不在这里。如果我点击刷新,它确实显示。如果我添加"执行此操作2",那么我将被重定向到任务列表,并且只有"执行此操作1"出现。直到我刷新,然后"做这个2"出现。

我想也许存在一个异步问题(页面的加载速度比在db中创建和读取记录的速度快?)但是我已经添加了调试步骤来解决这个问题。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我认为您在保存列表之前会重定向到显示页面。你必须这样做:

list.tasks.add({name: req.param('name'), list: req.session.List.id});

list.save(function(err) {
    res.redirect('/list/show/'+req.session.List.id);
});

/list/show/:id

的回调中重定向到list.save()