我的 Parse 云代碼中有這個錯誤,我真的不明白這個解決方案如何應用于我的代碼,因為我使用的是 Parse 云代碼。我知道服務器是一個通過使用 javascript 運行 Parse,然后在資料庫中運行 CRUD 操作。但是因為它不能被實際的 HTTP 請求真正看到,所以我不知道發生了什么以及我應該在哪里調整我的代碼。
如果有人能指出我做錯了什么以及我如何調整我的代碼,那就太好了。這也有什么大不了的?如果我將像下面這樣的云代碼留在生產環境中,這會是一件大事嗎?現在使用此功能,一切都按照高級結果完美運行。
我有一個想法,我應該繼續 .then() 功能。如果是這樣的話,這棵樹到底能走多久?
Parse.Cloud.define("ccCreateGroupRole", async function(request){
let user = request.user.id;
let acl = new Parse.ACL();
acl.setReadAccess(request.user, true);
acl.setWriteAccess(request.user, true);
let adminRole = new Parse.Role("Group_" user, acl);
adminRole.save(null, { useMasterKey: true }).then(function() {
adminRole.getUsers().add(request.user);
adminRole.save(null, { useMasterKey: true }).then(function() {
console.log("Role created " adminRole.id);
});
});
// Create Sync Status objects
let masterSyncStatus = {user: user, syncStatus: true};
let newUserSyncStatus = {user: user, syncStatus: true};
let masterArray = [];
let newUserArray = [];
masterArray.push(masterSyncStatus);
newUserArray.push(newUserSyncStatus);
// Initialize Sync Status class object by groupID
let SyncStatus = Parse.Object.extend("SyncStatus");
let syncStatus = new SyncStatus();
syncStatus.set("groupName", "Group_" user);
syncStatus.set("masterSyncStatus", masterArray);
syncStatus.set("newUserSyncStatus", newUserArray);
await syncStatus.save(null, { useMasterKey: true });
// Write own publicKey to user class
let UserAddPublicKey = Parse.Object.extend("_User");
let userAddPublicKey = new UserAddPublicKey();
userAddPublicKey.set("objectId", request.user.id);
userAddPublicKey.save(null, { useMasterKey: true });
});
uj5u.com熱心網友回復:
您的原始代碼并未等待您的所有承諾。相反,您使用了await和的混合.then(),但沒有在任何地方正確控制流量。
當您將所有.then()內部嵌套在一起時,您就能夠正確地對所有異步操作進行排序,以便 B 等待 A 完成,C 等待 B 完成。您的原始代碼沒有這樣做。
但是,您也可以await通過await在所有異步操作上使用來確保您對所有內容進行排序:
Parse.Cloud.define("ccCreateGroupRole", async function(request) {
let user = request.user.id;
let acl = new Parse.ACL();
acl.setReadAccess(request.user, true);
acl.setWriteAccess(request.user, true);
let adminRole = new Parse.Role("Group_" user, acl);
await adminRole.save(null, { useMasterKey: true });
adminRole.getUsers().add(request.user);
await adminRole.save(null, { useMasterKey: true });
console.log("Role created " adminRole.id);
// Create Sync Status objects
let masterSyncStatus = { user: user, syncStatus: true };
let newUserSyncStatus = { user: user, syncStatus: true };
let masterArray = [];
let newUserArray = [];
masterArray.push(masterSyncStatus);
newUserArray.push(newUserSyncStatus);
// Initialize Sync Status class object by groupID
let SyncStatus = Parse.Object.extend("SyncStatus");
let syncStatus = new SyncStatus();
syncStatus.set("groupName", "Group_" user);
syncStatus.set("masterSyncStatus", masterArray);
syncStatus.set("newUserSyncStatus", newUserArray);
await syncStatus.save(null, { useMasterKey: true });
// Write own publicKey to user class
let UserAddPublicKey = Parse.Object.extend("_User");
let userAddPublicKey = new UserAddPublicKey();
userAddPublicKey.set("objectId", request.user.id);
await userAddPublicKey.save(null, { useMasterKey: true });
});
uj5u.com熱心網友回復:
我不確定這是否是“javascript 正確的”,但我將許多 .then({}) 鏈接在一起,并且不再出現錯誤。我不明白為什么我之前使用的 async/await 不起作用……但這解決了我的主要問題。
編輯: async/await 確實有效,但我在決議日志中收到錯誤。
誰能更好地解釋這一點?如果是這樣,正確答案仍有待爭奪。
Parse.Cloud.define("ccCreateGroupRole", async function(request) {
let user = request.user.id;
let acl = new Parse.ACL();
acl.setReadAccess(request.user, true);
acl.setWriteAccess(request.user, true);
let adminRole = new Parse.Role("Group_" user, acl);
adminRole.save(null, { useMasterKey: true }).then(function() {
adminRole.getUsers().add(request.user);
adminRole.save(null, { useMasterKey: true }).then(function() {
console.log("Role created " adminRole.id);
// Create Sync Status objects
let masterSyncStatus = { user: user, syncStatus: true };
let newUserSyncStatus = { user: user, syncStatus: true };
let masterArray = [];
let newUserArray = [];
masterArray.push(masterSyncStatus);
newUserArray.push(newUserSyncStatus);
// Initialize Sync Status class object by groupID
let SyncStatus = Parse.Object.extend("SyncStatus");
let syncStatus = new SyncStatus();
syncStatus.set("groupName", "Group_" user);
syncStatus.set("masterSyncStatus", masterArray);
syncStatus.set("newUserSyncStatus", newUserArray);
syncStatus.save(null, { useMasterKey: true }).then(function() {
// Write own publicKey to user class
let UserAddPublicKey = Parse.Object.extend("_User");
let userAddPublicKey = new UserAddPublicKey();
userAddPublicKey.set("objectId", request.user.id);
userAddPublicKey.save(null, { useMasterKey: true }).then(function() {
console.log("Save success");
});
});
});
});
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361842.html
標籤:javascript 承诺 解析平台 解析云代码 back4app
上一篇:如何在vanillajavascript中使用一個切換按鈕呼叫2個不同的函式
下一篇:如何僅保留目錄樹中葉子的路徑?
