Ответ 1
Вы можете использовать Promise.resolve
для "обертывания" значения в обещании.
getSectionFromDataPromise :: obj -> promise
getSectionFromDataPromise = R.pipe(getSectionFromData , (val) => Promise.resolve(val))
Таким образом, вы можете продвигать (поднимать) любую функцию, которая возвращает нормальное значение тому, которое возвращает обещание.
Подъем является важной концепцией в FP. Вы можете просмотреть Array.map
как функцию, которая поднимает функцию, которая преобразует значение в функцию, которая преобразует массив значений.
Вы можете использовать Promise.all
для записи функции, которая сравнивает promises и (например), выдает ошибку, если они не равны.
function promiseEquals (f1, f2) {
return Promise.all([f1(), f2()]).then(function(vals) {
if(!R.equals(vals[0], vals[1])) {throw "The values aren't equal"}
return vals[0]
})
}
Наконец, вы можете объединить два:
promiseEquals(getSectionFromDataPromise, getSectionFromDb)
.then(function(val){
console.log(val)
})
.catch(function(val){console.log("Error "+val)})