ฉันยังใหม่กับการเขียนโปรแกรมเชิงฟังก์ชัน และฉันพบตัวอย่างการเขียนโปรแกรมเชิงฟังก์ชัน fluture ต่อไปนี้ ซึ่งดูเหมือนว่าจะเป็นตัวอย่างที่ดีจริงๆ ในการจัดการคำสั่งฐานข้อมูลและการจัดการข้อมูลที่ตามมา อย่างไรก็ตาม ข้อแม้ก็คือในการอ่านเกี่ยวกับแนวคิดการเขียนโปรแกรมเชิงฟังก์ชัน ดูเหมือนว่า Just/Nothing monads จะเป็นแนวทางที่แนะนำสำหรับการจัดการการตรวจสอบค่าว่าง 1) สิ่งนี้จะเข้ากับตัวอย่างนี้ได้อย่างไร และ 2) หาก findOne ปฏิเสธ มันจะหยุด chains ที่ตามมาไม่ให้ทำงานและไปที่ fork ทันทีหรือไม่
import Future from 'fluture';
const processAll = Future.fork(_sendError, _sendResponse);
const _fetchFromDB =
encaseP(userId => myModel.findOne({ id: userId }).exec())
//Future.fromPromise(userId => myModel.findOne({ id: userId }).exec())
processAll(_fetchFromDB(userId)
.chain(getDataGeneric)
.chain(_findDevice)
.chain(_processRequest))
ฉันได้รับตัวอย่างนี้จากลิงก์ stackoverflow ต่อไปนี้ และแก้ไข fromPromise เป็น encaseP:
วิธีทำอย่างใดอย่างหนึ่ง Monads ตระหนักถึงฟังก์ชัน Async (สัญญา/อนาคต)
ฉันคิดว่า encaseP จะแทนที่ fromPromise ในตัวอย่างของพวกเขาในการแปลง Promise เป็น Future