浏览代码

fix: can't overwrite existing storage variable (#1545)

Ahmad Kholid 1 年之前
父节点
当前提交
4f66f599d3

+ 10 - 5
src/workflowEngine/WorkflowWorker.js

@@ -110,7 +110,7 @@ class WorkflowWorker {
     currentColumn.index += 1;
   }
 
-  setVariable(name, value) {
+  async setVariable(name, value) {
     let variableName = name;
     const vars = this.engine.referenceData.variables;
 
@@ -127,10 +127,15 @@ class WorkflowWorker {
     }
 
     if (variableName.startsWith('$$')) {
-      dbStorage.variables.put({
-        value,
-        name: variableName.slice(2),
+      variableName = variableName.slice(2);
+
+      const findStorageVar = await dbStorage.variables.get({
+        name: variableName,
       });
+
+      if (findStorageVar)
+        await dbStorage.variables.update(findStorageVar.id, { value });
+      else await dbStorage.variables.add({ name: variableName, value });
     }
 
     this.engine.addRefDataSnapshot('variables');
@@ -392,7 +397,7 @@ class WorkflowWorker {
             value = parseJSON(value, value);
 
             if (item.type === 'variable') {
-              this.setVariable(item.name, value);
+              await this.setVariable(item.name, value);
             } else {
               this.addDataToColumn(item.name, value);
             }

+ 1 - 1
src/workflowEngine/blocksHandler/handlerClipboard.js

@@ -46,7 +46,7 @@ export default async function ({ data, id, label }) {
     valueToReturn = copiedText;
 
     if (data.assignVariable) {
-      this.setVariable(data.variableName, copiedText);
+      await this.setVariable(data.variableName, copiedText);
     }
     if (data.saveData) {
       this.addDataToColumn(data.dataColumn, copiedText);

+ 1 - 1
src/workflowEngine/blocksHandler/handlerCookie.js

@@ -75,7 +75,7 @@ async function cookie({ data, id }) {
 
   if (data.type === 'get') {
     if (data.assignVariable) {
-      this.setVariable(data.variableName, result);
+      await this.setVariable(data.variableName, result);
     }
     if (data.saveData) {
       this.addDataToColumn(data.dataColumn, result);

+ 1 - 1
src/workflowEngine/blocksHandler/handlerDataMapping.js

@@ -46,7 +46,7 @@ export async function dataMapping({ id, data }) {
   }
 
   if (data.assignVariable) {
-    this.setVariable(data.variableName, dataToMap);
+    await this.setVariable(data.variableName, dataToMap);
   }
   if (data.saveData) {
     this.addDataToColumn(data.dataColumn, dataToMap);

+ 2 - 2
src/workflowEngine/blocksHandler/handlerGoogleSheets.js

@@ -154,7 +154,7 @@ export default async function ({ data, id }, { refData }) {
       result = await getSpreadsheetRange(data);
 
       if (data.assignVariable) {
-        this.setVariable(data.variableName, result);
+        await this.setVariable(data.variableName, result);
       }
       if (data.saveData) {
         this.addDataToColumn(data.dataColumn, result);
@@ -172,7 +172,7 @@ export default async function ({ data, id }, { refData }) {
       result = spreadsheetId;
 
       if (data.assignVariable) {
-        this.setVariable(data.variableName, result);
+        await this.setVariable(data.variableName, result);
       }
       if (data.saveData) {
         this.addDataToColumn(data.dataColumn, result);

+ 1 - 1
src/workflowEngine/blocksHandler/handlerHandleDownload.js

@@ -48,7 +48,7 @@ async function handleDownload({ data, id: blockId }) {
         this.addDataToColumn(data.dataColumn, downloadItem.filename);
       }
       if (data.assignVariable) {
-        this.setVariable(data.variableName, downloadItem.filename);
+        await this.setVariable(data.variableName, downloadItem.filename);
       }
 
       return {

+ 1 - 1
src/workflowEngine/blocksHandler/handlerInsertData.js

@@ -81,7 +81,7 @@ async function insertData({ id, data }, { refData }) {
         this.addDataToColumn(item.name, tableValue);
       });
     } else {
-      this.setVariable(item.name, value);
+      await this.setVariable(item.name, value);
     }
   }
 

+ 1 - 1
src/workflowEngine/blocksHandler/handlerInteractionBlock.js

@@ -69,7 +69,7 @@ async function interactionHandler(block) {
     }
 
     if (block.data.assignVariable) {
-      this.setVariable(block.data.variableName, data);
+      await this.setVariable(block.data.variableName, data);
     }
 
     if (debugMode && isChrome) {

+ 5 - 3
src/workflowEngine/blocksHandler/handlerJavascriptCode.js

@@ -204,9 +204,11 @@ export async function javascriptCode({ outputs, data, ...block }, { refData }) {
     }
 
     if (result.variables) {
-      Object.keys(result.variables).forEach((varName) => {
-        this.setVariable(varName, result.variables[varName]);
-      });
+      await Promise.allSettled(
+        Object.keys(result.variables).map(async (varName) => {
+          await this.setVariable(varName, result.variables[varName]);
+        })
+      );
     }
 
     let insert = true;

+ 1 - 1
src/workflowEngine/blocksHandler/handlerLogData.js

@@ -22,7 +22,7 @@ export async function logData({ id, data }) {
       logs = getTranslateLog(curWorkflowState, 'json');
 
       if (data.assignVariable) {
-        this.setVariable(data.variableName, logs);
+        await this.setVariable(data.variableName, logs);
       }
       if (data.saveData) {
         this.addDataToColumn(data.dataColumn, logs);

+ 5 - 3
src/workflowEngine/blocksHandler/handlerParameterPrompt.js

@@ -75,9 +75,11 @@ export default async function ({ data, id }) {
 
   const result = await getInputtedParams(promptId, timeout);
 
-  Object.entries(result).forEach(([varName, varValue]) => {
-    this.setVariable(varName, varValue);
-  });
+  await Promise.allSettled(
+    Object.entries(result).map(async ([varName, varValue]) =>
+      this.setVariable(varName, varValue)
+    )
+  );
 
   return {
     data: '',

+ 1 - 1
src/workflowEngine/blocksHandler/handlerSaveAssets.js

@@ -60,7 +60,7 @@ export default async function ({ data, id, label }) {
 
   if (data.saveDownloadIds) {
     if (data.assignVariable) {
-      this.setVariable(data.variableName, downloadIds);
+      await this.setVariable(data.variableName, downloadIds);
     }
     if (data.saveData) {
       this.addDataToColumn(data.dataColumn, downloadIds);

+ 1 - 1
src/workflowEngine/blocksHandler/handlerSortData.js

@@ -54,7 +54,7 @@ export async function sliceData({ id, data }) {
   });
 
   if (data.assignVariable) {
-    this.setVariable(data.variableName, sortedArray);
+    await this.setVariable(data.variableName, sortedArray);
   }
   if (data.saveData) {
     this.addDataToColumn(data.dataColumn, sortedArray);

+ 1 - 1
src/workflowEngine/blocksHandler/handlerTabUrl.js

@@ -23,7 +23,7 @@ export async function logData({ id, data }) {
   }
 
   if (data.assignVariable) {
-    this.setVariable(data.variableName, urls);
+    await this.setVariable(data.variableName, urls);
   }
   if (data.saveData) {
     this.addDataToColumn(data.dataColumn, urls);

+ 2 - 1
src/workflowEngine/blocksHandler/handlerTakeScreenshot.js

@@ -51,7 +51,8 @@ async function takeScreenshot({ data, id, label }) {
           uri: dataUrl,
           ext: data.ext,
         });
-      if (data.assignVariable) this.setVariable(data.variableName, dataUrl);
+      if (data.assignVariable)
+        await this.setVariable(data.variableName, dataUrl);
     };
 
     if (data.captureActiveTab) {

+ 1 - 1
src/workflowEngine/blocksHandler/handlerWebhook.js

@@ -105,7 +105,7 @@ export async function webhook({ data, id }, { refData }) {
     }
 
     if (data.assignVariable) {
-      this.setVariable(data.variableName, returnData);
+      await this.setVariable(data.variableName, returnData);
     }
     if (data.saveData) {
       if (data.dataColumn === '$assignColumns' && Array.isArray(returnData)) {