【发布时间】:2016-12-14 21:45:15
【问题描述】:
我正在尝试使用 Either Monad 来传递我的数据,问题是我无法弄清楚如何让我的 Monad 了解异步操作
这就是我所拥有的
let processData = Either.either(_sendError, _sendResponse)
processData(_getDataGeneric(queryResult)
.chain(_findDevice)
.chain(_processRequest)
);
queryResult 是我从数据库本身获取的。
问题是获取结果只是在管道的中间。 我想要的是这个
ValidateUserInput -> GetDataFromDB -> ProcessData
processAll(_fetchFromDB(userId)
.getDataGeneric
.chain(_findDevice)
.chain(_processRequest))
//_fetchFromDB , Mongoose Query
function _fetchFromDB(userId){
return myModel.findOne({id:userId}).exec()
.then(function(result){
return Right(result)
}).catch((err)=>Left(err))
}
如果结果从 DB 中有效,它将返回一个 Right 实例,如果有任何类型的错误,它将返回 Left
问题是这个操作是异步的,我不确定如何让我的 Either Monad 来处理它。
关于如何让我的 Monad 在其操作中了解 Promise 的任何想法?
【问题讨论】:
-
Model.findOne()行之前是否有返回关键字?
标签: javascript functional-programming ramda.js