Как экспортировать результат цепочки обещаний в отдельный модуль? - PullRequest
1 голос
/ 04 июня 2019

Я хотел бы использовать результат googleApi.js внутри index.js, но у меня возникли проблемы с доступом к данным из index.js. Результат либо неопределенный, либо объект обещания в зависимости от решений, которые я пробовал. Может ли кто-нибудь указать мне правильное направление?

index.js:

const googleClient = require('./googleApi.js')

let one = '52.4362,4.7291'
let two = '52.2672,5.0813'

const test = async() => {
    const result = await googleClient.getTimeAndDistance(one,two)
    console.log(result)
}

test()

googleApi.js

const googleMapsClient = require('@google/maps').createClient({
    key: 'MY_API_KEY',
    Promise: Promise
})

getTimeAndDistance = (origin, destination) => {
    googleMapsClient.directions({
        origin: origin,
        destination: destination,
        language: 'en',
        units: 'metric',
    })
        .asPromise()
        .then((res) => {
            return res.json.routes[0].legs[0]
        })
        .catch((err) => {
            console.log(err)
        })
}

module.exports.getTimeAndDistance = getTimeAndDistance

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

1 Ответ

0 голосов
/ 07 июня 2019

In index.js возврат googleMapsClient изнутри getTimeAndDistance, чтобы сделать доступным res.json.routes[0].legs[0] вне getTimeAndDistance.

const googleMapsClient = require('@google/maps').createClient({
    key: 'MY_API_KEY',
    Promise: Promise
})

getTimeAndDistance = (origin, destination) => {
 return googleMapsClient.directions({
//^^^^^ 
        origin: origin,
        destination: destination,
        language: 'en',
        units: 'metric',
        })
        .asPromise()
        .then((res) => {
            return res.json.routes[0].legs[0]
        })
        .catch((err) => {
            console.log(err)
        })
}

module.exports.getTimeAndDistance = getTimeAndDistance
...