续集 reload() 清除所有模型数据



我正在尝试重新加载模型以包含关联。这是我的代码:

const order = new Order({ total: 0 })
return order.save().then(savedOrder => {
const orderItems = req.body.items.map(i => {
return Eliquid.findByPk(i.eliquid).then(eliquid => {
const item = Item.build({
qty: i.qty,
n: i.n,
})
item.setEliquid(eliquid)
item.setOrder(savedOrder)
return item
.save().then(i => {
console.log('Saved, has id, has qty', i.id, i.qty)
return i.reload()
})
.then(i => {
console.log('Reloaded, qty is now NULL!', i.id, i.qty)
return i
})
})
})

为什么重新加载我的实例后它会被淘汰?不知道我做错了什么

据我所知,.reload()(与.save()不同(不会将项目交付回客户端; 相反,它将原始项的属性与服务器上的属性同步。

我不确定在这种情况下你是否真的需要重新加载,因为该项目的客户端和服务器表示将在.save()后立即自动同步,但这里有一个示例,说明您将如何利用javascript的"闭包"来维护对项目的访问,.reload()之后。

const order = new Order({ 'total': 0 });
return order.save()
.then(savedOrder => {
const orderItems = req.body.items.map(i => {
return Eliquid.findByPk(i.eliquid)
.then(eliquid => {
const item = Item.build({ 'qty': i.qty, 'n': i.n });
item.setEliquid(eliquid);
item.setOrder(savedOrder);
return item.save();
})
.then(ii => {
console.log('Saved, has id, has qty', ii.id, ii.qty);
return ii.reload()
.then(() => { // .reload() does not repeat item back to client
console.log('same ii as before', ii.id, ii.qty); // here, access ii through closure.
return ii;
});
});
});
});

笔记:

  • 为了清楚起见,ii在第二个 .then(( 回调中使用,以避免重用 .map(( 回调的符号i
  • 内在的承诺链尽可能扁平化。如果你需要在第二个内.then()访问eliquid,你需要恢复到return item.save().then()并产生更深层次的嵌套。
  • 除了利用闭包之外,其他方法也会退出 - 请参阅此处的综合答案。

最新更新