2017-06-26 6 views
-1

Ich habe ein Problem mit Versprechungen zu verstehen. Könnten Sie mir bitte helfen:Wie bekomme ich ein Versprechen?

Ich versuche node-geocoder Bibliothek zu verwenden.

Also, das ist eine Funktion, die ein Array von Breiten- und Längengrad von einem Punkt auf der Google-Karte zurückgeben soll.

import getLocation from './index' 

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

-Test versagt und Ich erhalte die folgende Fehlermeldung:

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 
} 

vorherige Code sollte für diesen Test ok

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

wie ein Paket zu öffnen, die noch nicht geliefert worden ist? Ein Versprechen ist wie eine Versandbestätigung, nur ein Platzhalter für die Sachen, die Sie erwarten. Alles, was Sie mit diesem Ding tun können, wartet darauf, dass das Versprechen erfüllt wird/das zu liefernde Paket. '.then()' Sie können tun, was Sie wollen, mit allem, was Sie haben. – Thomas

Antwort

-1

Promises .. . SIND DIE BESTEN!

Für mich war es schwer zu begreifen, sobald ich es bekam, bekam ich es.

Lesen Sie die Kommentare, ich habe sie verwendet, um das Versprechen zu beschreiben, nicht den Code im Versprechen.

Hier ist ein solides Beispiel.

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

Verwandte Themen