2017-06-26 89 views
-1

我在理解承诺方面遇到了一些问题。您能否帮助我:如何获得承诺的结果?

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

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

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} 
+0

如何打开尚未送达的包裹? Promise就像发货确认一样,只是您正在等待的东西的占位符。你所能做的就是用这件事,等待承诺兑现/包裹交付。 '然后()'你可以随心所欲地做任何事。 – Thomas

回答

-1

承诺.. 。 最好的!

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

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

这里是一个很好的例子。

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); 
 
}