Во-первых, я вижу избыточный код, поэтому я бы объединил ваши запросы в одну более общую c функцию. Кажется, вы не хотите этого делать, если вы чувствуете, что должны передать параметр 'request' второй функции, но заметили, что вы никогда не используете его. Просто передайте URL в обоих случаях.
В вашей обобщенной функции c, которую я ниже называю makeRequest, обязательно верните обещание, иначе вы получите неопределенное значение. Кроме того, обязательно вызовите resolve
для анализируемого объекта, а не return
;
Кроме того, я бы использовал catch
для ваших ошибок, так что вы будете ловить его всякий раз, когда происходит ошибка, будь то в первом then
или во втором.
Между прочим, это не проверено, но я думаю, что здесь есть общие моменты.
makeRequest('somewhere')
.then(result => makeRequest('theSecondUrl'))
.then(result => engine.log(result))
.catch(error => engine.log(error));
function makeRequest (url, method, datatype, timeout) {
return new Promise(function(resolve, reject) {
http.simpleRequest({
'method': method || 'GET',
'url': url,
'dataType': datatype || 'json',
'timeout': timeout || 6000,
}, function (error, response) {
if (error) {
engine.log("Error: " + error)
reject()
}
if (response.statusCode != 200) {
engine.log("HTTP Error: " + response.status)
reject()
}
// use 'let' or else you've made a globally scoped variable
let parsed = JSON.parse(response.data)
resolve(parsed);
});
})
}