запрос npm не работает синхронно [дубликат]

Просто для удовольствия ...

def merge(mylists):
    results, sets = [], [set(lst) for lst in mylists if lst]
    upd, isd, pop = set.update, set.isdisjoint, sets.pop
    while sets:
        if not [upd(sets[0],pop(i)) for i in xrange(len(sets)-1,0,-1) if not isd(sets[0],sets[i])]:
            results.append(pop(0))
    return results

и моя переписка с лучшим ответом

def merge(lsts):
  sets = map(set,lsts)
  results = []
  while sets:
    first, rest = sets[0], sets[1:]
    merged = False
    sets = []
    for s in rest:
      if s and s.isdisjoint(first):
        sets.append(s)
      else:
        first |= s
        merged = True
    if merged: sets.append(first)
    else: results.append(first)
  return results
21
задан Felix Kling 25 July 2016 в 12:29
поделиться

2 ответа

ES6

Использование: где request - require('./await-request')

const init = async () => {
    try {
        const result = await request({
            uri: 'statdirectory/exchange?json',
            baseUrl: 'https://bank.gov.ua/NBUStatService/v1/',
            json: true
        })
        console.log(result)
    }
    catch (err) {
        console.error(err)
    }
}

Код:

// request-service.js
const request = require('request')

module.exports = async (value) => 
    new Promise((resolve, reject) => {
        request(value, (error, response, data) => {
            if(error) reject(error)
            else resolve(data)
        })
    })
9
ответ дан dimpiax 17 August 2018 в 09:56
поделиться

Вы должны только await на что-то, что возвращает Promise. Я бы определенно рекомендовал читать Promises до того, как вы начнете работать с async и await. Вероятно, вы можете заставить этот пример работать, создав свою собственную функцию-обертку вокруг request, чтобы вернуть ее, например:

function doRequest(url) {
  return new Promise(function (resolve, reject) {
    request(url, function (error, res, body) {
      if (!error && res.statusCode == 200) {
        resolve(body);
      } else {
        reject(error);
      }
    });
  });
}

// Usage:

async function main() {
  let res = await doRequest(url);
  console.log(res);
}

main();

Изменить: альтернативно, вы можете изучить request-prom вместо обычного модуля запроса.

49
ответ дан saadq 17 August 2018 в 09:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: