在回调中调用yield, redux saga给出了一个异常原因
Calling yield in callback, redux saga gives me an exception why?
所以我注释掉了它给我回溯的地方。
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,有两种方法可以避免:
-
cps效果。文档链接
import { cps , ... } from 'redux-saga/effects'; export function* watchFileReader(){ const action = yield take("DROP_FILE") let file = action.file[0]; let e = yield cps(readFile,file); <---------------- sessionStorage.removeItem('img') sessionStorage.setItem('img', e.target.result) yield put({type: "UPDATE", img: e.target.result}) }
注意:函数必须调用cb(null, result)来通知中间件一个成功的结果。如果fn遇到一些错误,那么它必须调用cb(error)来通知中间件发生了错误。
-
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}) }
两个示例的LIVE DEMO
相关文章:
- JS异常:animate不是一个函数
- IE 在 JavaScript 中抛出了一个关于 “self = this” 的异常
- Jquery 函数创建一个异常的暂停
- JavaScript 抛出了一个与拼接相关的异常 - 敌人[i] 是未定义的
- 未捕获的异常:每个数据元素都必须实现一个唯一的“id”属性slick.dataview.js
- 一个带有 jQuery Click Function 异常的 CSS 类
- 当字符串被异常分隔时,检测字符串是否包含另一个字符串
- 在onError事件中捕获一个javascript异常(webkit语音识别)
- 我怎么能"getImageData”;从另一个网站?SECURITY_ERR:DOM异常18
- 错误:未捕获的异常:[exception.."字符串包含一个..quot;
- 为什么,如果“$q.all”没有返回一个promise数组,则是一个未抛出的异常
- 如何将所有javascript/Jquery异常写入一个文本文件
- 如何在WebMethod中出现异常时显示一个JavaScript弹出窗口
- AOP对DB异常执行一个通用的操作
- 从JS中的另一个函数调用方法(TypeError异常)
- 只用一个try-catch块就可以捕获多个异常
- 在回调中调用yield, redux saga给出了一个异常原因
- 当定义startsWith时,为什么控制台给我一个异常?
- 为什么.prototype. isprototypeof不是一个函数,我的javascript抛出了一个异常
- 在ExpressJS中添加一个异常app.use()