Nano Hash - криптовалюты, майнинг, программирование

Оберните запрос API Foursquare обещанием использовать с Redux-Saga в ответ

У меня есть два фрагмента, перечисленных ниже, а именно sagas.js и mapUpdates.js

По какой-то причине в файле saga.js строка var venues = yield getVenueCoords() не ожидает завершения запроса, что, в свою очередь, setUserCoords(venues) в моем хранилище избыточности как undefined.

Если я поставлю в конце оператора request в функции console.log(JSON.parse(body)), то в конце установки, после того как все другие функции будут запущены в моей саге, у меня будет json, зарегистрированный на консоли.

Мне нужно завершить запрос, прежде чем перейти к setVenueCoords(venues), чтобы правильно обновить магазин с данными о месте проведения.

Что я делаю неправильно здесь, и что я могу сделать, чтобы это исправить?

саги.js

import { put, takeEvery, all } from "redux-saga/effects";
import { delay } from "redux-saga";
import { getPreciseLocation, getVenueCoords } from "../utils/mapUpdates";
import {
  setUserCoords,
  setVenueCoords,
  initMapRunning,
  initMapComplete
} from "../actions";

function* initMap() {
  var userLocation = {};
  var userCoords = yield getPreciseLocation().then(function(value) {
    return (userLocation = { lat: value[0], lng: value[1] });
  });
  yield put(setUserCoords(userCoords));
  yield delay(3000);
  var venues = yield getVenueCoords(userCoords);
  yield put(setVenueCoords(venues));
  yield put(initMapComplete());
}

function* watchInitMap() {
  yield takeEvery("INIT_MAP", initMap);
}

export default function* rootSaga() {
  yield all([watchInitMap()]);
}

mapUpdates.js

export function getVenueCoords(userCoords) {
  let obj = request(
    {
      url: "https://api.foursquare.com/v2/venues/explore",
      method: "GET",
      qs: {
        client_id: foursquareID,
        client_secret: foursquareSecret,
        ll: userCoords,
        query: "coffee",
        v: "20171114",
        limit: 10000
      }
    },
    function(err, res, body) {
      if (err) {
        console.error(err);
      } else {
        return JSON.parse(body);
      }
    }
  );
}

Ответы:


1

Я обнаружил, что лучший способ приблизиться к этому — использовать библиотеку bluebird и просто promisify request.

Как это сделать можно найти по этой ссылке. . .

Как правильно обещать запрос?

var request = Promise.promisify(require("request"), {multiArgs: true});
Promise.promisifyAll(request, {multiArgs: true})

export function getVenueCoords(userCoords) {
  let obj = request(
    {
      url: "https://api.foursquare.com/v2/venues/explore",
      method: "GET",
      qs: {
        client_id: foursquareID,
        client_secret: foursquareSecret,
        ll: userCoords,
        query: "coffee",
        v: "20171114",
        limit: 10000
      }
    }).then(function(){})
28.03.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..