Javascript Ant Design Pro登录问题。不理解代码
我在Ant Design pro工作。但是我不能理解登录代码的模式。在这里他们使用Javascript Ant Design Pro登录问题。不理解代码,javascript,ant-design-pro,es6-generator,Javascript,Ant Design Pro,Es6 Generator,我在Ant Design pro工作。但是我不能理解登录代码的模式。在这里他们使用 effects: { *login({ payload }, { call, put }) {} } 如果您想查看完整代码,请转到此链接 在这里您可以找到完整的代码。现在我不明白那个代码是什么意思 谢谢带星号的函数名表示一个。生成器是一个函数,其运行过程可以使用yield关键字暂停。是生成器与其调用者之间的双向通信。有了这些知识,我们来看看函数本身: *logi
effects: {
*login({ payload }, { call, put }) {}
}
如果您想查看完整代码,请转到此链接
在这里您可以找到完整的代码。现在我不明白那个代码是什么意思
谢谢带星号的函数名表示一个。生成器是一个
函数
,其运行过程可以使用yield
关键字暂停。是生成器与其调用者之间的双向通信。有了这些知识,我们来看看函数本身:
*login({ payload }, { call, put }) {
const response = yield call(fakeAccountLogin, payload);
yield put({
type: 'changeLoginStatus',
payload: response,
});
// Login successfully
if (response.status === 'ok') {
reloadAuthorized();
const urlParams = new URL(window.location.href);
const params = getPageQuery();
let { redirect } = params;
if (redirect) {
const redirectUrlParams = new URL(redirect);
if (redirectUrlParams.origin === urlParams.origin) {
redirect = redirect.substr(urlParams.origin.length);
if (redirect.match(/^\/.*#/)) {
redirect = redirect.substr(redirect.indexOf('#') + 1);
}
} else {
window.location.href = redirect;
return;
}
}
yield put(routerRedux.replace(redirect || '/'));
}
},
函数
需要两个对象作为输入,并将它们简化为参数。您需要将第一个参数作为对象传递,如{payload:'something'}
,此对象的payload
属性将映射到函数的参数中。类似地,您传递的第二个对象将需要一个调用和一个put属性,这是函数
首先,它执行调用,传递fakeAccountLogin和负载,并生成函数,即函数暂停并将调用结果发送到外部作用域。当使用生成器迭代器的.next()
函数
恢复登录函数时,传递给它的任何内容都将分配给响应。在此之后,调用put
,将changeLoginStatus
作为type
传递,将response
作为payload
传递,如果将结果传递给该函数的调用方,则传递结果
调用此生成器的迭代器的.next()
时,将根据“ok”检查response.status,如果存在匹配项,则调用reloadAuthorized
,urlParams
将初始化params
。在此之后,redirect
将使用params初始化。redirect
如果这是真的,redirecturlparms
将被初始化,并将发生一些进一步的URL操作。无论如何,如果存在重定向,则函数结束
如果response.status
为'ok'
,但没有重定向,则调用put
,并在下一次调用时从函数中产生结果。next()
调用将结束函数。如果response.status
不是'ok'
,则函数的结束时间要早得多,即当外部If被评估为false时
您需要研究如何减少Javascript中的对象和数组,以及迭代器和生成器函数。你将有一个困难的时间,直到你为此分配时间,所以你越早这样做,越好。我推荐本书的第2章和第5章:带星号的函数名表示A。生成器是一个函数
,其运行过程可以使用yield
关键字暂停。是生成器与其调用者之间的双向通信。有了这些知识,我们来看看函数本身:
*login({ payload }, { call, put }) {
const response = yield call(fakeAccountLogin, payload);
yield put({
type: 'changeLoginStatus',
payload: response,
});
// Login successfully
if (response.status === 'ok') {
reloadAuthorized();
const urlParams = new URL(window.location.href);
const params = getPageQuery();
let { redirect } = params;
if (redirect) {
const redirectUrlParams = new URL(redirect);
if (redirectUrlParams.origin === urlParams.origin) {
redirect = redirect.substr(urlParams.origin.length);
if (redirect.match(/^\/.*#/)) {
redirect = redirect.substr(redirect.indexOf('#') + 1);
}
} else {
window.location.href = redirect;
return;
}
}
yield put(routerRedux.replace(redirect || '/'));
}
},
函数
需要两个对象作为输入,并将它们简化为参数。您需要将第一个参数作为对象传递,如{payload:'something'}
,此对象的payload
属性将映射到函数的参数中。类似地,您传递的第二个对象将需要一个调用和一个put属性,这是函数
首先,它执行调用,传递fakeAccountLogin和负载,并生成函数,即函数暂停并将调用结果发送到外部作用域。当使用生成器迭代器的.next()
函数
恢复登录函数时,传递给它的任何内容都将分配给响应。在此之后,调用put
,将changeLoginStatus
作为type
传递,将response
作为payload
传递,如果将结果传递给该函数的调用方,则传递结果
调用此生成器的迭代器的.next()
时,将根据“ok”检查response.status,如果存在匹配项,则调用reloadAuthorized
,urlParams
将初始化params
。在此之后,redirect
将使用params初始化。redirect
如果这是真的,redirecturlparms
将被初始化,并将发生一些进一步的URL操作。无论如何,如果存在重定向,则函数结束
如果response.status
为'ok'
,但没有重定向,则调用put
,并在下一次调用时从函数中产生结果。next()
调用将结束函数。如果response.status
不是'ok'
,则函数的结束时间要早得多,即当外部If被评估为false时
您需要研究如何减少Javascript中的对象和数组,以及迭代器和生成器函数。你将有一个困难的时间,直到你为此分配时间,所以你越早这样做,越好。我推荐本书的第2章和第5章:谢谢您的重播。我真的被困在这里面了。但为什么他们会这样编码。它可以通过调用不同的函数来实现。为什么使用产量。如果你能帮助我解决关于产量的困惑!!!调用.next()找不到任何登录函数。我理解call()函数,但不理解put()函数。@Arnob不客气。如果导入并调用它Login,那么可以通过var myIterator=Login.effects.Login(yourobject1,yourobject2)调用Login函数;注意,这个调用只是创建迭代器并将参数传递给函数,函数还不会开始执行。只有在调用myIterator.next时,才开始执行函数,直到第一个yiel