[英]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.