2017-02-17 11 views
1

Я создаю небольшой API, который извлекает данные и выполняет задачи на нем (используя async), сохраняет некоторые из этих данных в массиве с помощью push, а затем показывает его клиенту с ответом Hapi().API с помощью Hapi & Async - Как очистить массив/выполнить что-то сразу после «ответа» или при каждом новом «получить»?

Я ищу, чтобы удалить мой массив (например, используя arrayname.length = 0) сразу после того, как сервер отправил ответ клиенту.

Текущий код следовать этой логике:

let data = [] 

server.route({ 
    method: 'GET', 
    path: '/api/{data}', 
    handler: function (request, reply) { 
     async.parallel([ 
      function(callback) { 
        // fetch some data, work with it and then add it to our array using push 
        data.push ({ // example data 
        bla:'blabla', 
        number:'10' 
        }); 
        callback(); 
      }, 
      function(callback) { // another time (...) 
        data.push ({ 
        bla:'blabla', 
        number:'2' 
        }); 
        callback(); 
       } 
     ], 
     function(err) { // This is the final callback, sort data and send it using reply 
       data.sort(function (a, b) { 
       return a.number - b.number 
       }) 
       reply(data) 
       console.log(request.params.data) 
     }) 
    } 
}); 

server.start((err) => { 

    if (err) { 
     throw err; 
    } 
    console.log(`Server running at: ${server.info.uri}`); 
}); 

С текущего кода, если я обновить мою страницу, данные добавляется к уже существующему массиву данных.

Я пробовал несколько часов и не нашел способ удалить этот массив сразу после ответа (данных).

Есть ли способ сделать это, или мне придется вложить параллельные асинхронные функции с помощью строки async и выполнить опорожнение таким образом? (Хейвену удалось преуспеть либо + переполнение звука).

Есть ли способ просто выполнить что-то, когда был вызван «ответ» или когда появился новый «get», так что каждый клиент может иметь только данные, созданные его запросом, а не также данные, которые были в массив раньше?

Спасибо!

+1

Возможно создать массив внутри 'handler'? Каждый раз, когда вы набираете маршрут, он будет инициализирован как пустой массив. Лично я не вижу смысла в том, чего вы пытаетесь достичь здесь ... – piotrbienias

+0

У меня такое чувство, что я пробовал это, и это создало проблему, но, очевидно, это не так. Очень просто, не знаю, что случилось с моим беспокойным умом. Большое спасибо за ваш ответ! Если сообщение это как ответ, я могу принять его, если вы хотите, @piotrbienias –

ответ

1

Следуя советам @ piotrbienias, я создал массив внутри обработчика, а не в начале моего файла, и он очищается каждый раз, когда я делаю новый запрос на свой API, поэтому мне не нужно его вычищать, как только отправляется ответ ,

Спасибо, @piotrbienias!

2

Я согласен со всеми ответами, предлагающими разместить массив внутри обработчика. Когда массив расположен на стороне обработчика запроса, все запросы, поступающие через него, будут записываться в один и тот же массив. Даже если вы очистите этот массив в конце логики обработчика, он не будет гарантированно пустым для следующего контекста запроса, так как вы можете иметь много условий запроса в игре.