![](/img/trans.png)
[英]Parse.com Cloud Code beforeSave( ) Error: “Uncaught Tried to save an object with a pointer to a new, unsaved object”
[英]Parse.Cloud.beforeSave not able to set a new field on an object being created
我在Parse-Server
上的Parse.Cloud.beforeSave
函數中有一個小問題。 這條線讓我感到困惑:
request.object.set("dbCount", 0);
它之前一直在工作。 但是由於我進行了服務器更新,按照HEROKU
要求( cedar-14堆棧即將終止)位於heroku-18堆棧上。 它不再起作用。
此行的目的是在新項目存儲在數據庫中時粘貼一個初始化為零的計數器。 但是,盡管該項目已按原樣創建,但缺少字段“dbCount”。 這是為什么? 創建該字段的正確代碼是什么?
作為參考,這里是beforeSave函數的相關代碼:
Parse.Cloud.beforeSave("TheCollection", async (request) => {
if (!request.object.isNew()) return;
var query;
query = new Parse.Query("TheCollection");
query.equalTo("TITLE",request.object.get("TITLE"));
await query.find().then
(function(resUnit) {
// If there is already a Unit with the same Title, we return an error.
if (resUnit.length) throw "TITLE-USED";
var query;
query = new Parse.Query("TheCollection");
var token = request.user.getSessionToken();
query.find({sessionToken: token}).then
(function(resUnit) {
... some useful processing ...
// This next line is not working as it used to.
request.object.set("dbCount", 0);
});
});
});
您可能錯過了“返回”,並且在您的承諾解決之前保存正在發生。 我還看到您在嵌套范圍內使用相同的變量“resUnit”,這可能會混淆它的使用。
Parse.Cloud.beforeSave("TheCollection", async (request) => {
if (!request.object.isNew()) return;
var query;
query = new Parse.Query("TheCollection");
query.equalTo("TITLE",request.object.get("TITLE"));
await query.find().then
(function(resUnit) {
// If there is already a Unit with the same Title, we return an error.
if (resUnit.length) throw "TITLE-USED";
var query;
query = new Parse.Query("TheCollection");
var token = request.user.getSessionToken();
>>>> return <<<<< query.find({sessionToken: token}).then
(function(resUnit) {
... some useful processing ...
// This next line is not working as it used to.
request.object.set("dbCount", 0);
});
});
});
如果你想更進一步,我會充分利用 async 和 await 像這樣扁平化你的代碼。 通過使用扁平化代碼,您可以消除大量導致錯誤的混亂
Parse.Cloud.beforeSave("TheCollection", async (request) => {
if (!request.object.isNew()) return;
const query = new Parse.Query("TheCollection");
query.equalTo("TITLE",request.object.get("TITLE"));
const resUnit1 = await query.first()
// If there is already a Unit with the same Title, we return an error.
if (resUnit) throw "TITLE-USED";
const query2 = new Parse.Query("TheCollection");
const resUnit2 = await query2.find({sessionToken: request.user.getSessionToken()})
... some useful processing ...
request.object.set("dbCount", 0);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.