Я новичок, чтобы обещать и пытаться построить логику с обещаниями на NodeJS. У меня есть API для отслеживания отработанных часов.Построение цепочки с логикой с использованием PostgreSQL
Люди просто должны ввести свой ПИН-код в Clock In или Out.
Что такое API (для части CLOCK-IN), это проверка базы данных (PostgreSQL с помощью pg-prom), чтобы найти идентификатор сотрудника с PIN-кодом. Если PIN-код недействителен (работника не найдено), отклоните обещание с сообщением об ошибке. Затем он должен искать свой «ClockStatus», чтобы проверить, находятся ли они уже в IN или OUT. Это можно сделать с тем же запросом, который извлекает идентификатор сотрудника. Если уже IN, отклоните обещание с сообщением. Затем он должен искать идентификатор Shift от Employee. После этого он соберет информацию Shift, чтобы сравнить Time. Finnaly, если вставить строку в базу данных с собранной информацией с предыдущего шага.
Вкратце:
New Promise
Get the Employee ID and Clock Status, and Shift ID
Then
If No Employee found then reject the promise
Then
If Clock Status is already in, reject the promise with a different message
Then
Gather informations for the shift
Then
Insert a new row in the WorkHour table using Employee info and Shift informations
У меня есть маршрутизатор здесь (Использование ExpressJS)
router.post('/clockin', function(req, res) {
//Execute the API
time
.clockin(req.body.pin)
.then(function(time) { res.send(time)})
.catch(function(err) { res.status(500).send(err) });
});
Я пытаюсь построить обещание цепи, но я не хочу, чтобы попасть в пирамида гибели.
clockin: function(pin) {
// Getting the resourceID from PIN
var p = new Promise((resolve, reject) => {
if (pin === undefined) {
throw new Error('No PIN');
} else {
db.any('SELECT id, timeclockstatus From Employee Where PIN = $1', pin)
.then((EmployeeInfos) => {
return (db.any('select id, timeclockstatus from res_resources where id = $1 ', ResourceID[0].id))
})
//****** I'm stuck here
Я хотел бы использовать собственное обещание ES6. Я попытался найти примеры, но ни один из них не подходит для того, что я ищу. Или, может быть, я что-то пропустил ... Любое предложение?
попробовать следующий код псевдо. обратите внимание, если db.any возвращает обещание, вам не нужно использовать антиспат конструктора Promise, который у вас есть, в коде, который вы отправили. –
Как известно, чтобы вызывать 'clockin()' (или 'clockout') перед сдвигом известен? –
Неясно, к чему относится 'ResourceID [0]' в вашем примере. –