返回JavaScript Promise拒绝履行的价值

时间:2017-04-07 14:26:53

标签: javascript node.js asynchronous promise google-geocoder

我正在尝试使用node-geocoder npm包来获取某些对象的纬度和经度。

请你帮我理解JavaScript的承诺。

以下是一个示例代码:

import nodeGeocoder from 'node-geocoder'

function getLocation (str) {
    // Selecting Google as provider
    const geocoder = nodeGeocoder({
        provider: 'google',
    })

    return geocoder.geocode(str)
        .then(response => {
            // I want to return latitude an longitude
            return [response[0].latitude, response[0].longitude]
        })
        .catch(error => {
            console.log(`Geocoder Error: ${ error }`)
        })
}

export default getLocation

因此。这是一个测试(Jest框架):

import getLocation from './index'

test('Checking', () => {
    expect(getLocation('29 champs elysée paris')).toEqual([48.8698679, 2.3072976])
})

当我尝试使用此测试时,我只获得承诺状态{"fulfillmentValue": undefined, "isFulfilled": false, "isRejected": false, "rejectionReason": undefined}

但我需要得到承诺解决的结果。我该怎么办?

我不想编辑测试

1 个答案:

答案 0 :(得分:1)

对于测试,大多数测试套件为所有基于promise的测试提供异步回调。我希望它(双关语)能像这样工作:

import getLocation from './index'

test('Checking', (done) => {
  getLocation('29 champs elysée paris').then(geoData => {
    expect(geoData).toEqual([48.8698679, 2.3072976]);
    done();
  }).catch(error => {
    done(error)
  });
});

根据您可能使用的测试框架,您调用解析器回调的方式(即:done())可能会发生变化。但是,模式应该或多或少相同。