2017-01-18 3 views
0

Я использую библиотеку запроса узел, который можно найти по следующей ссылкеУзел Запрос Библиотека - Promise Рефакторинг

https://github.com/request/request

У меня есть ряд функций, которые выглядят следующим образом

function doRequest() { 

    return new Promise(function(resolve,reject) { 

     request('some-url', function(error,response,body) { 

       if (!error && response.statusCode === 200) { 
        resolve(body) 
       } 
     }); 

    }); 

} 

Я тогда вызываю эти функции

doRequest() 
    .then(function(response){ 
     console.log(response); 
    }) 

Мой вопрос: есть ли способ написать мою функцию doRequest без необходимости создавать новое обещание? Я чувствую, что это неудобно выглядит и может быть анти-шаблон? Вроде как в AngularJS вы часто видите людей, использующих

$q.defer() 

при выполнении HTTP вызовов, когда вызов HTTP уже возвращает обещание.

Любые советы были бы замечательными.

+0

Нет, это правильный способ сделать это самостоятельно и не является анти-шаблоном, хотя меня не удивило бы, что кто-то уже предоставил возможность Promisify этой библиотеки. – Alnitak

+0

Фактически в Git repo уже есть тестовые примеры для использования Promisify с 'request' – Alnitak

+0

Спасибо за ответ. Для краткости оставим бит отклонения! – user2085143

ответ

1

Если вы хотите выполнить Promises вручную на основе результатов метода request(), тогда это правильный способ сделать это (хотя требуется также и ошибка reject()).

Однако в этой библиотеке запросов уже есть appears to support функция Promisify библиотеки обезьян Bluebird, которая может автоматически обернуть эти функции в те, которые возвращают обещания.

Смежные вопросы