Dva: Versuchen Sie, das Rückgabeversprechen für den Versand zu unterstützen (EFFECT_ACTION)

Erstellt am 19. Okt. 2016  ·  10Kommentare  ·  Quelle: dvajs/dva

Hilfreichster Kommentar

@nickzheng versuche diese Methode:

Verwenden Sie Promise, um den Versand in die Komponente einzuschließen, zum Beispiel:

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

Und in der Wirkung von dva können Sie es so schreiben:

* create({ payload }, { put, call }) {
  const { value, resolve, reject } = payload;
  // 一些操作之后

  if (success) {
     resolve('done');
  } else {
     reject('error');
  }
}

Die bisherige Idee von

Alle 10 Kommentare

1. Wenn ich asynchrones Schließen integrieren möchte, https://ant.design/components/modal-cn/#components -modal-demo-async, muss onOk ein Promise in then this.setState({
sichtbar: falsch,-
ConfirmLoading: false,
});

Nach dem Versenden einer Aktion in dva,
versenden({
Typ:'Benutzer/Erstellen',
Nutzlast: Werte,
}); Der Wert ist kein Versprechen, sondern eine Aktion.

  1. Die Lösung kann darin bestehen, die Zustände "visual" und "confirmLoading" in den Store zu setzen.

    1. Ist es möglich, dass nach dem Senden einer Aktion in dva, es ein Versprechen ist und redux-thunk ein Versprechen ist.Mein Gericht kann sein, dass die Implementierung von saga anders ist.

@nickzheng versuche diese Methode:

Verwenden Sie Promise, um den Versand in die Komponente einzuschließen, zum Beispiel:

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

Und in der Wirkung von dva können Sie es so schreiben:

* create({ payload }, { put, call }) {
  const { value, resolve, reject } = payload;
  // 一些操作之后

  if (success) {
     resolve('done');
  } else {
     reject('error');
  }
}

Die bisherige Idee von

https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365, integrierter Support-Dispatch (EffectAction) Rückgabeversprechen.

@sorrycc gefällt eine, fragen Sie, welche Version dieser Funktion hinzugefügt wurde? Scheint das Changelog nicht zu sehen?

@daskyrk usw. #772

Es wird in dva@2 unterstützt .

Wie definiert man nach der integrierten Unterstützung für Versprechen Entschlossenheit und Ablehnung?
Wie zählt man als Erfolg, wie zählt man als Misserfolg?
In der von Lösung werden

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

Bedeutet das eingebaute Versprechen, das Oben in das Unten zu verwandeln?

dispatch({
  type: 'users/create',
  payload: {
    values,
    resolve,
    reject,
  },
})
  .then(res => {
    console.log(res);
  })
  .catch(err => {
    console.log(err);
  })

Projekt

const { dispatch } = this.props;
dispatch({
   type: 'specification/fetch',
    payload: applicationId,
 }).then((data) => {
     console.log(data)
 });

Modell

 effects: {
    * fetch({ payload }, { call, put, select}) {
      const response = yield call(querySpecification, payload);
      yield put({
        type: 'list',
        payload: response
      });
      return yield select(state => state.specification.list);  //important
    }
},
reducers: {
    list(state, action) {
      return {
        ...state,
        list: action.payload
      };
    }
  }

@Youthink Was in meiner Situation wie unten zu tun ist

Projekt

this.props.dispatch({
    type: 'app/login',
    payload: {
        phone: '13312332131',
        smscode: '6666',
    }
}).then(data => {
    console.log('success result', data)
}).catch(err => {
    console.warn('error result', err)
})

Modell

*login({ payload }, { call, put }) {
    // 请求状态 fetching 为 true,方便页面显示loading状态
    yield put({ type: 'updateState', fetching: true })
    // 这里进行登录 service
    const login = yield call(authService.login, payload)
    // 如果上面的 authService.login 异常了,下面的逻辑就不会进行了,下面的 fetching 设置为 false 也不会执行到
    if (login) {
        yield put(NavigationActions.back())
        Storage.set('login', login)
    }
    // 这里重置下 状态 fetching 为 false
    yield put({type:'updateState', fetching: false })
},

Ich denke, egal ob das Backend Erfolg zurückgibt oder eine Ausnahme vorliegt, es kann in yield put({type:'updateState', fetching: false }) . Ich weiß, dass es möglich ist, unabhängig von Erfolg oder Misserfolg, einen Dispatch an das Modell zum Set-Abrufen im Projekt zu senden, aber es scheint nicht sehr angebracht, dies zu tun.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen