簡體   English   中英

使用ValidatedMethod進行客戶端模擬后,不會觸發流星方法回調

[英]Meteor method callback is not fired after client simulation using ValidatedMethod

我正在使用流星。 正如您在Github上的ValidatedMethod的README文件中所看到的那樣,它在調用方法時使用returnStubValue選項,但是它似乎不適用於我。 我想知道您對此有何看法。

我已經上傳了一個簡單的Meteor項目,該項目在Github上重現了該問題鏈接到存儲庫

這是我的服務器端方法:

export const createTodo = new ValidatedMethod({
  name: 'todos.create',
  validate: new SimpleSchema({
    todo: String,
  }).validator(),
  run({ todo }) {

    if (this.isSimulation) {
      return { finished: false };
    }

    Todos.insert({ todo });
    return { finished: true };
  },
});

這是在待辦事項集合中插入待辦事項的簡單方法。 在客戶端,我立即返回一個對象{ finished: false } 在服務器端,我更新數據庫,然后返回一個對象{ finished: true }

這是我的客戶端方法調用:

createTodo.call({ todo }, (err, res) => {
  console.log(res);
});

我只調用方法,然后console.log結果。 因為我使用的是mdg:validated-method ,該方法使用returnStubValue選項,所以我想我的控制台應該輸出finished: false ,然后finished: true 但是它實際上只輸出finished: true

這里有我不懂的東西嗎?

mdg:validated-method做得很好。 如果您調用(實際上是Meteor.apply )常規的Meteor方法而未引入validated-method ,則將觀察到相同的結果。

這是東西。 在流星的文檔中,

除非調用方法時傳遞了returnStubValue選項,否則將放棄Method模擬的返回值,在這種情況下,它將返回給Method調用者。 ValidatedMethod默認情況下會傳遞此選項。

注意粗體。 在示例項目中,模擬返回的對象{ finished: false }是調用的返回值,而不是回調。 因此,如何進行客戶端調用的以下轉換

const ret = createTodo.call({ todo }, (err, res) => {
  console.log('res', res);
});
console.log('ret', ret);

將打印

ret, {finished, false}
res, {finished, true}

在控制台上。 通過不等待任何服務器結果來使UI保持樂觀。 這種行為是完全有意義的,不是嗎?

好問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM