So habe ich diese Klasse namens Ereignisse und ich versuche, eine asynchrone Funktion von meinem Server aufzurufen. Ich versuche zu verstehen, wo ich falsch gelaufen bin und wie ich ein Versprechen in einem anderen asynchronen Anruf lösen kann. Irgendwelche Hinweise oder Tipps würden sehr geschätzt werden.Versuchen, eine Versprechenskette aus ES6-Klassenfunktionen zu lösen
Dies ist die Event-Funktion Ich rufe:
Event.prototype.getCost = function(name_of_place){
return new Promise(function(){
var placeID;
var GooglePlaces = require("node-googleplaces");
const places = new GooglePlaces(API_KEY);
const params = {
location: '40.689247,-123.102192',
radius: 1000
};
var query =
{
query: name_of_place
};
// ASYNC call
places.textSearch(query).then((res) => {
console.log("FIRST ASYNC CALL");
console.log(res.body.results[0].place_id);
placeID = res.body.results[0].place_id;
var request_place_details={
placeid : placeID
};
console.log(request_place_details);
return request_place_details;
}).then((request_place_details) => {
console.log("SECOND ASYNC CALL");
places.details(request_place_details).then((res) => {
console.log(res.body.result.price_level + " S");
var cost = res.body.result.price_level;
//trying to resolve getCost promise
//resolve(this.cost);
return cost;
}).then((cost) => {
console.log("ATTEMPT TO RESOLVE ORIGINAL");
this.cost = cost;
console.log(cost + " F");
//WANT TO RETURN THIS VALUE IN THE END
resolve(this.cost);
});
});
})};
Dies ist, wo ich es von bin Aufruf:
//Server is currently serving on port 8420
app.listen(8420,function startServer(){
console.log("Listening on :: " + 8420);
var Event1 = new events(7,10,'New York');
// console.log(Event1.getCost('Sushi'));
Event1.getCost('Sushi').then(res => {
console.log(res);
})
});
Dies ist ein [anti-pattern] (https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns) zu wickeln ein anderes Versprechen in einem neuen Versprechen und wird nicht benötigt. Geben Sie einfach places.textSearch (query) .then (...) 'zurück und entfernen Sie das äußere Versprechen vollständig. – jfriend00
Der ganze Sinn von Versprechen besteht darin, asynchrone Dinge zu verketten - gib ein Versprechen ab und du kannst es dann aus deiner Hauptversprechenskette machen, anstatt Versprechungen zu verschachteln! – towerofnix