使用参数 mobx-state-tree 执行异步操作

0 javascript action asynchronous reactjs 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)
            }
        })
    },
Run Code Online (Sandbox Code Playgroud)
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)
            }
        })
    },
Run Code Online (Sandbox Code Playgroud)

在流函数内部传递参数时,它不会编译,当我包装函数时,它只会打印 console.log("inside inner")

如何将参数传递给异步操作函数?

Mon*_*gal 6

我尝试了一个简单的例子如下,它的工作原理 -

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")
});
Run Code Online (Sandbox Code Playgroud)

我认为它只是你第二个例子中错误位置的 * 。