简体   繁体   English

尝试从ES6类函数解析承诺链

[英]Trying to resolve a promise chain from ES6 class functions

So I have this class called Events and I'm trying to call an async function from my server. 因此,我有一个名为Events的类,并且试图从服务器中调用异步函数。 I'm trying to understand where I went wrong / how to resolve a promise inside another async call. 我试图了解我哪里出了错/如何在另一个异步调用中解决承诺。 Any hints or tips would be greatly appreciated. 任何提示或技巧将不胜感激。

This is the event function I'm calling: 这是我正在调用的事件函数:

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

This is where I'm calling it from: 这是我从以下位置调用的地方:

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

your whole structure is way to complicated. 您的整个结构很复杂。 when stripping the comments, you can reduce the code to this: 删除注释时,可以将代码简化为:

Event.prototype.getCost = function(name_of_place){
    var GooglePlaces = require("node-googleplaces");
    const places = new GooglePlaces(API_KEY);
    //const params = {
    //  location: '40.689247,-123.102192',
    //  radius: 1000
    //};

    return places.textSearch({ query: name_of_place })
        .then(res => res.body.results[0].place_id)
        .then(placeID => places.details({ placeid : placeID }))
        .then(res => res.body.result.price_level)
}

You're not declaring a promise correctly, return new Promise( function(resolve, reject){} 您没有正确声明承诺,请return new Promise( function(resolve, reject){}

And then you can use that like so 然后可以像这样使用

places.details(request_place_details).then((res) => {
             console.log(res.body.result.price_level + "   S");
             var cost = res.body.result.price_level;


             // Just resolve it here.
             resolve(cost);                 
        });


// And here, res == cost.
Event1.getCost('Thai Moon').then(res=> {
  console.log(res);
})

Also for reference, check out the Promise docs . 另请参阅Promise 文档 ,以供参考。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM