1. Если я хочу интегрировать асинхронное закрытие, https://ant.design/components/modal-cn/#components -modal-demo-async, onOk должен принять обещание, тогда this.setState ({
видимый: ложь,
confirmLoading: false,
});
После отправки акции в два,
отправлять({
тип: 'пользователи / создать',
полезная нагрузка: значения,
}); Значение - это не обещание, а действие.
Решением может быть установка состояний visible и confirmLoading в хранилище.
@nickzheng попробуйте этот метод:
Используйте обещание, чтобы обернуть отправку в компонент, например:
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
А в эффекте два можно написать так:
* create({ payload }, { put, call }) {
const { value, resolve, reject } = payload;
// 一些操作之后
if (success) {
resolve('done');
} else {
reject('error');
}
}
Предыдущая идея @sorrycc заключалась в том, что нет необходимости
https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365, встроенная отправка поддержки (EffectAction) возвращает обещание.
@sorrycc понравилась одна, спросите, какая версия этой функции была добавлена? Не видите журнал изменений?
@daskyrk и т. д. # 772
Поддерживается в dva @ 2 .
После встроенной поддержки обещаний, как определить действие разрешения и отклонения?
Как считать успехом, как считать неудачей?
В решении, предоставленном
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
Означает ли встроенное обещание превратить верхнюю часть в нижнюю?
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
})
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
проект
const { dispatch } = this.props;
dispatch({
type: 'specification/fetch',
payload: applicationId,
}).then((data) => {
console.log(data)
});
модель
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 Что делать в моей ситуации, как
проект
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)
})
модель
*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 })
},
Я думаю, что независимо от того, возвращает ли бэкэнд успех или есть исключение, его можно выполнить до yield put({type:'updateState', fetching: false })
. Я знаю, что можно отправить отправку модели, чтобы установить выборку в проекте, независимо от успеха или неудачи, но это не кажется очень подходящим для этого.
Самый полезный комментарий
@nickzheng попробуйте этот метод:
Используйте обещание, чтобы обернуть отправку в компонент, например:
А в эффекте два можно написать так:
Предыдущая идея @sorrycc заключалась в том, что нет необходимости