smi*_*ham 7 javascript node.js promise sequelize.js
我有两个模型(个人,电子邮件),我试图使用Sequelize命令插入创建的'Individual_Email'表.虽然Sequelize正在创建所需的表,但在尝试向该表添加/ get/set时会返回以下错误:"Object [object Promise]没有方法'addEmail'".我错过了什么?
Sequelize文档说如果模型是User和Project,"这将把方法getUsers,setUsers,addUsers添加到Project,getProjects,setProjects和addProject添加到User."
这让我相信(看看承诺)我可能误解了如何使用Node的异步功能.我已经尝试了同步和异步版本的插入,两者都返回上面相同的消息.
Sequelize文档:http://docs.sequelizejs.com/en/latest/docs/associations/
码:
路线/ index.js
var express = require('express');
var router = express.Router();
var models = require('../models');
/* GET home page. */
router.get('/', function(req, res, next) {
'use strict';
var tIndividual, tEmail;
tIndividual = models.Individual.create({
name: "Test"
});
tEmail = models.Email.create({
address: "test@gmail.com"
});
console.log(tEmail);
res.render('index', { title: 'Express' });
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
要么
/* GET home page. */
router.get('/', function(req, res, next) {
'use strict';
var tIndividual, tEmail;
tIndividual = models.Individual.create({
name: "Test"
}).then(function(){
tEmail = models.Email.create({
address: "test@gmail.com"
}).then(function(){
tIndividual.addEmail(tEmail).then(function(){
console.log("Success");
});
})
});
res.render('index', { title: 'Express' });
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
车型/ index.js
db.Individual.hasMany(db.Email, {
as: 'Email',
through: 'Individual_Email'
});
db.Email.hasMany(db.Individual, {
as: 'Individual',
through: 'Individual_Email'
});
Run Code Online (Sandbox Code Playgroud)
如何以最佳方式添加到表'Individual_Email'?我假设我需要同步地等待更新,但我愿意接受任何建议.谢谢!
当您调用.save()或.create()其他返回Promise的方法时,您应该调用.then()该promise.当它结算时 - 也就是说,当对象被保存/创建/某些东西时 - then将调用您的函数,并将接收已保存/创建的对象作为参数.
所以你的第一次尝试可以改写为:
models.Individual.create({
name: "Test"
}).then(function(createdIndividual) { // note the argument
models.Email.create({
address: "test@gmail.com"
}).then(function(createdEmail) { // note the argument
createdIndividual.addEmail(createdEmail)
.then(function(addedEmail) { // note th-- well you get the idea :)
console.log("Success");
});
})
});
Run Code Online (Sandbox Code Playgroud)
上面的代码缺少一些重要的东西,例如return更好的链接和错误处理的承诺,但它是一个开始.我推荐Bluebird关于此事的文档(这是Sequelize使用的Promise库,但还有其他几个)
| 归档时间: |
|
| 查看次数: |
14717 次 |
| 最近记录: |