Ich versuche, entweder Monad zu verwenden, um meine Daten durchzuleiten, das Problem ist, dass ich nicht herausfinden kann, wie ich meine Monad bewusst machen die Operation, die asyncSo machen Sie Monaden beachten von Async-Funktionen (Promises/Future)
hier ist, was ich habe
let processData = Either.either(_sendError, _sendResponse)
processData(_getDataGeneric(queryResult)
.chain(_findDevice)
.chain(_processRequest)
);
queryresult ist das, was ich aus der Datenbank selbst holen.
das Problem ist, dass das Holen des Ergebnisses nur in der Mitte der Pipeline ist. , was ich will, ist dies
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))
}
, wenn das Ergebnis gültig von DB ist, wird es eine Rechtsinstanz zurückgeben, und wenn es irgendeine Art von Fehler ist, wird er zurückkehren Left
das Problem, dass diese Operation ist ist Async und ich bin mir nicht sicher, wie ich meine Entweder-Monade dazu bringen kann, damit umzugehen und sie zu verarbeiten.
Irgendwelche Ideen, wie ich meine Monad auf Promises in ihrer Funktionsweise aufmerksam machen kann?
Gibt es ein Return-Schlüsselwort vor der 'Model.findOne()' Zeile? – Sgnl