redux-toolkit 中的dispatch(..).unwrap() 是什么?

Alv*_*ney 5 javascript redux redux-toolkit

来自 redux 教程:

const onSavePostClicked = async () => {
  if (canSave) {
    try {
      setAddRequestStatus('pending')
      await dispatch(addNewPost({ title, content, user: userId }))
        .unwrap()
    } catch (err) {
      console.error('Failed to save the post: ', err)
    } finally {
      setAddRequestStatus('idle')
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

据我了解dispatch(addNewPost({ title, content, user: userId }))会返回这样的承诺:

const onSavePostClicked = async () => {
  if (canSave) {
    try {
      setAddRequestStatus('pending')
      await dispatch(addNewPost({ title, content, user: userId }))
        .unwrap()
    } catch (err) {
      console.error('Failed to save the post: ', err)
    } finally {
      setAddRequestStatus('idle')
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并且dispatch(addNewPost({ title, content, user: userId })).unwrap()还会返回一个承诺。

那么,promise without 和 with 有什么区别呢unwrap

state: "fulfilled"

result: fulfilled action object
Run Code Online (Sandbox Code Playgroud)

phr*_*hry 6

dispatch(addNewPost({ title, content, user: userId }))将解析该 thunk 已发送的最新操作。

使用.unwrap(),它将解析为fulfilled操作的值,或抛出一个rejected操作。

这里的想法是,您应该能够使用dispatchasyncThunk 而不必每次都捕获它,但前提是您确实想基于它编写更多逻辑。