0

有人可以向我解释为什么在下面的代码中(使用 r25630 Windows),第 241 行的 iInsertTot 的值为 null,或者更重要的是,为什么第 234 行(“return iInsertTot;”)没有执行,因此在行241,iInsertTot 为空。第 231/232 行的 iInsertTot 的值是一个整数。虽然我可以并且可能应该以不同的方式编写代码,但我认为我会尝试看看它是否有效,因为我对 Futures 和 Chaining 的理解是它会起作用。我之前以类似的方式使用过“return”并且它有效,但在这些情况下我返回 null(例如下面的第 201 行)。

/// The problem lines are :
233      fUpdateTotalsTable().then((_) {
234        return iInsertTot;
235      });

在调试器中运行时,似乎第 234 行“return iInsertTot;” 从未真正执行过。从命令行运行具有相同的结果。

在第 233 行调用的方法(fUpdateTotalsTable)是我正在添加的东西,它基本上由现阶段的同步代码组成。但是,调试器似乎正确地通过了它。

我已经包含了方法“fUpdateTotalsTable()”(第 1076 行),以防万一导致问题。

刚刚添加了第 236 到 245 行,但是以防万一该代码无效,我已将这些行注释掉并运行时出现相同的问题。

218  /*
219   * Process Inserts
220   */
221    }).then((_) {
222      sCheckpoint = "fProcessMainInserts";
223      ogPrintLine.fPrintForce ("Processing database ......");
224      int iMaxInserts = int.parse(lsInput[I_MAX_INSERTS]);
225      print ("");
226      return fProcessMainInserts(iMaxInserts, oStopwatch);
227   /*
228   * Update the 'totals' table with the value of Inserts
229   */
230    }).then((int iReturnVal) {
231      int iInsertTot = iReturnVal;
232      sCheckpoint = "fUpdateTotalsTable (insert value)";
233      fUpdateTotalsTable().then((_) {
234        return iInsertTot;
235      });

236   /*
237   * Display totals for inserts
238   */
239    }).then((int iInsertTot) {
240      ogTotals.fPrintTotals(
241        "${iInsertTot} rows inserted - Inserts completed",
242        iInsertTot, oStopwatch.elapsedMilliseconds);
243
244      return null;
245  /*


192  /*
193   * Clear main table if selected
194   */
195    }).then((tReturnVal) {
196      if (tReturnVal)
197        ogPrintLine.fPrintForce("Random Keys Cleared");
198      sCheckpoint = "Clear Table ${S_TABLE_NAME}";
199      bool tClearTable = (lsInput[I_CLEAR_YN] == "y");
200      if (!tFirstInstance)
201        return null;
202      return fClearTable(tClearTable, S_TABLE_NAME);
203
204   /*
205    * Update control row to increment count of instances started
206    */
207    }).then((_) {

1073  /*
1074   * Update totals table with values from inserts and updates
1075  */
1076  async.Future<bool> fUpdateTotalsTable() {                                     
1077    async.Completer<bool> oCompleter = new async.Completer<bool>();
1078
1079    String sCcyValue = ogCcy.fCcyIntToString(ogTotals.iTotAmt);
1080 
1081    print ("\n*********  Total = ${sCcyValue}  \n");
1082  
1083    oCompleter.complete(true);
1084    return oCompleter.future;  
1085  }
4

1 回答 1

2

您的函数L230-235不返回任何内容,这就是您的iInsertTot函数null L239的原因。要使其工作,您必须在第233return行添加一个。

231      int iInsertTot = iReturnVal;
232      sCheckpoint = "fUpdateTotalsTable (insert value)";
233      return fUpdateTotalsTable().then((_) {
234        return iInsertTot;
235      });
于 2013-08-04T14:31:39.103 回答