Javascript 在回调中调用yield,redux传奇给了我一个例外,为什么?
所以我评论了它给我的回溯Javascript 在回调中调用yield,redux传奇给了我一个例外,为什么?,javascript,asynchronous,redux,redux-saga,Javascript,Asynchronous,Redux,Redux Saga,所以我评论了它给我的回溯 export function* watchFileReader(){ const action = yield take("DROP_FILE") console.log('action', action) let file = action.file[0]; readFile(file, function(e){ sessionStorage.removeItem('img') console.log('alskdjfalsdjkf', e.target.r
export function* watchFileReader(){
const action = yield take("DROP_FILE")
console.log('action', action)
let file = action.file[0];
readFile(file, function(e){
sessionStorage.removeItem('img')
console.log('alskdjfalsdjkf', e.target.result)
sessionStorage.setItem('img', e.target.result)
// yield put({type: "UDATE", {img: e.target.result})
})
}
更新:
这是我承诺的让代码工作的函数
function readFileWithPromise(file){
return new Promise((resolve, reject) => {
readFile(file, function(e){
if (e){
resolve(e)
}else{
reject(e)
}
})
})
}
您不能在回调中使用yield,有两种方法可以避免这种情况:
import { call, ... } from 'redux-saga/effects';
export function* watchFileReader(){
const action = yield take("DROP_FILE")
let file = action.file[0];
let e = yield call(readFileWithPromise,file); <----------------
sessionStorage.removeItem('img')
sessionStorage.setItem('img', e.target.result)
yield put({type: "UPDATE", img: e.target.result})
}
从'redux saga/effects'导入{call,…};
导出函数*watchFileReader(){
const action=yield take(“删除文件”)
let file=action.file[0];
let e=yield call(readFileWithPromise,file);我迫不及待地想在我的电脑前尝试一下。谢谢,我用promisify获得了它。你太棒了!
function readFileWithPromise(file){
return new Promise((resolve,reject)=>{
readFile(file,(err, res) => err ? reject(err) : resolve(res));
});
}
import { call, ... } from 'redux-saga/effects';
export function* watchFileReader(){
const action = yield take("DROP_FILE")
let file = action.file[0];
let e = yield call(readFileWithPromise,file); <----------------
sessionStorage.removeItem('img')
sessionStorage.setItem('img', e.target.result)
yield put({type: "UPDATE", img: e.target.result})
}