使用参数 mobx-state-tree 执行异步操作
Performing asynchronous actions with parameters mobx-state-tree
我想使用 mobx-state-tree 将参数传递给异步操作。他们建议使用生成器函数。他们的例子没有提供使用参数的例子,我觉得如何做并不明显。
我试过将流函数包装在普通函数中以向下传递参数。但是它不起作用。我尝试了下面的例子,包括一些额外的摆弄。
setAvailability: function (id, status) {
console.log("inside outer")
flow(function* () {
console.log("inside inner")
try {
yield UpdateAvailability(id, status)
const { data } = yield self.fetch(GetTutors)
self.data = data;
} catch (e) {
console.log(e.stack)
}
})
},
setAvailability: flow*(function(id, status) {
console.log("inside inner")
try {
yield UpdateAvailability(id, status)
const { data } = yield self.fetch(GetTutors)
self.data = data;
} catch (e) {
console.log(e.stack)
}
})
},
在流函数内部传递参数时它不编译,当我包装函数时它只打印
console.log("inside inner")
如何将参数传递给异步操作函数?
我尝试了一个简单的例子如下,它有效 -
import {flow, types} from "mobx-state-tree"
const Store = types.model({})
.actions(self => ({
fetchProjects: flow(function* fetchProjects(par1, par2) { // <- note the star, this a generator function!
console.log('flow called');
console.log(par1);
console.log(par2);
})
}));
export const store = Store.create({});
// async actions will always return a promise resolving to the returned value
store.fetchProjects('test parameter', 'test parameter 2').then(() => {
console.log("done")
});
我认为你的第二个例子中的 * 位置不对。
我想使用 mobx-state-tree 将参数传递给异步操作。他们建议使用生成器函数。他们的例子没有提供使用参数的例子,我觉得如何做并不明显。
我试过将流函数包装在普通函数中以向下传递参数。但是它不起作用。我尝试了下面的例子,包括一些额外的摆弄。
setAvailability: function (id, status) {
console.log("inside outer")
flow(function* () {
console.log("inside inner")
try {
yield UpdateAvailability(id, status)
const { data } = yield self.fetch(GetTutors)
self.data = data;
} catch (e) {
console.log(e.stack)
}
})
},
setAvailability: flow*(function(id, status) {
console.log("inside inner")
try {
yield UpdateAvailability(id, status)
const { data } = yield self.fetch(GetTutors)
self.data = data;
} catch (e) {
console.log(e.stack)
}
})
},
在流函数内部传递参数时它不编译,当我包装函数时它只打印
console.log("inside inner")
如何将参数传递给异步操作函数?
我尝试了一个简单的例子如下,它有效 -
import {flow, types} from "mobx-state-tree"
const Store = types.model({})
.actions(self => ({
fetchProjects: flow(function* fetchProjects(par1, par2) { // <- note the star, this a generator function!
console.log('flow called');
console.log(par1);
console.log(par2);
})
}));
export const store = Store.create({});
// async actions will always return a promise resolving to the returned value
store.fetchProjects('test parameter', 'test parameter 2').then(() => {
console.log("done")
});
我认为你的第二个例子中的 * 位置不对。