【问题标题】:How to get a result of a promise? [duplicate]如何获得承诺的结果? [复制]
【发布时间】:2017-11-29 14:14:27
【问题描述】:

我在理解承诺方面有些问题。你能帮我吗:

我正在尝试使用node-geocoder 库。

所以,这是一个函数,它应该返回谷歌地图上某个点的经纬度数组。

import NodeGeocoder from 'node-geocoder'

export default function getLocation () {
    const geocoder = NodeGeocoder({
        provider: 'google',
    })

    const point = geocoder.geocode('29 champs elysée paris', (error, response) => {
        return [response[0].latitude, response[0].longitude]
    })

    return point
}

之前的代码应该可以用于这个测试:

import getLocation from './index'

test('This is a test', () => {
    expect(getLocation()).toEqual([48.8698679, 2.3072976])
})

测试失败,我收到以下错误消息:

Expected value to equal:
  [48.8698679, 2.3072976]
Received:
  {"fulfillmentValue": undefined, "isFulfilled": false, "isRejected": false, "rejectionReason": undefined}

【问题讨论】:

  • 如何打开尚未发货的包裹? Promise 就像一个发货确认,只是你正在等待的东西的占位符。你所能做的就是等待承诺兑现/包裹交付。 .then() 你可以随心所欲,随心所欲。

标签: javascript ecmascript-6 promise geocoding google-geocoder


【解决方案1】:

承诺...是最好的!

对我来说,这很难把握,一旦我明白了,我就明白了。

阅读 cmets,我用它们来描述承诺,而不是承诺中的代码。

这是一个可靠的例子。

function logIn(email, password) {
  const data = {
    email,
    password
  };

  // first I define my promise in a const
  const AUTH = new Promise((resolve, reject) => {
    // this is a normal Jquery ajax call
    $.ajax({
      url: "/api/authenticate",
      type: "POST",
      data, // es6
      success: function(res) {
        resolve(res); // this will be sent to AUTH.then()
      },
      error: function(err) {
        reject(err); // this will be sent to AUTH.catch()
      }
    })
  });

  // once the resolve callback is sent back, I can chain my steps like this
  AUTH.then((res) => {
      let token = JSON.stringify(res);
      return token;
    })
    .then((token) => {
      var d = new Date();
      d.setTime(d.getTime() + (1 * 24 * 60 * 60 * 1000));
      var expires = "expires=" + d.toUTCString();
      return document.cookie = `token=${token}; ${expires}; path=/`;
    })
    .then(() => {
      return window.location = "/"; // go home
    })
    .catch(errCallback); // skips to this if reject() callback is triggered
}

function errCallback(err) {
  return console.error(err);
}

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 2013-12-08
    • 2019-04-19
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多