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.
Die Lösung kann darin bestehen, die Zustände "visual" und "confirmLoading" in den Store zu setzen.
@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.
Hilfreichster Kommentar
@nickzheng versuche diese Methode:
Verwenden Sie Promise, um den Versand in die Komponente einzuschließen, zum Beispiel:
Und in der Wirkung von dva können Sie es so schreiben:
Die bisherige Idee von