我正在尝试通过react redux文档了解中间件的承诺,但不理解then
以下内容:
const vanillaPromise = store => next => action => {
if (typeof action.then !== 'function') {
return next(action)
}
return Promise.resolve(action).then(store.dispatch)
}
怎么then
知道要调度什么?动作未作为参数传递
return Promise.resolve(action).then(function (action) {store.dispatch(action})
所以我不明白调度如何接收动作。
希望我能为您提供解释。
让我们看看您所熟悉的:
return Promise.resolve(action)
.then(function (action) { store.dispatch(action)} )
您会看到以下部分:
function (action) { store.dispatch(action)}
那只是一个等待传递“ action”属性的函数。
现在,当我们查看您遇到的困扰您的问题时,是这样的:
return Promise.resolve(action)
.then(store.dispatch) // <--- this part
“调度”只是一个函数,在这种情况下,它期望一个参数。最有可能的是,一个对象-像这样:
store.dispatch({ type: 'MY_ACTION_TYPE' })}
现在,您可以像这样将其“包装”在一个封闭容器中,并且看起来很熟悉:
.then( (action) => {
store.dispatch(action)
})
但是,我们真的需要将其“包装”到一个匿名函数中吗?并不是真的,所以我们可以放:store.dispatch,它是函数“ waiting”(等待),从promise的返回中传递参数。这样想:
var MultiplyByTwo = (x) => x * 2
Promise.resolve(5).then(MultiplyByTwo)
// see here, this function is gonna be called with the resolution with the 5
当我们检查函数“ MultipleByTwo”时,它具有您熟悉的熟悉的签名:(x)=> x * 2
如果仅删除函数名称,则其相同:
Promise.resolve(5).then((x) => x * 2)
注意:您会看到resolve(5)->将该resolve.then视为一条链或“移交”。当我们“ resolve(5)”时,我们将值“ 5”向前传递给“ .then”。现在记住,这5个值可以是任何...原始类型,在这种情况下为5个,是一个对象{TYPE:“ WHATEVER”},一个函数等。它只是传递给您。例如,“嘿'.then',这是我的价值。
resolve(5).then(myfunction)
| ^
|__>__>__>__>__>_|
重要的是要了解“ myFunction”是上面的示例,或者在我们的multipliByTwo甚至在store.dispatch示例中。它们都期望传递参数。
multiplyByTwo(x) <-- expecting one argument
否则您的函数可能不会在函数签名中声明它,但是它将在主体内部,例如。
myFunction() {
const args = Array.from(arguments) // we grab the arguments
}
或希望有任意数量的参数
myOtherFunction(...args)
但是,是的,这些功能都需要解决方案的一些输入才能起作用。在某些情况下,您可能并不关心返回的值,如果有的话,您只想拥有一些流控制...就这样做吧。
我希望这会有所帮助,并希望我实际上回答了您的问题。如果没有,请告诉我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句