2016-09-30 3 views
0

У меня есть компонент продукта и компонент продукта. Каждый продукт будет иметь владелецVueJS Promise не работает

То, что я пытаюсь сделать

Я получаю список продуктов путем вызова API конечной точки. Когда обещание будет разрешено, у меня есть список продуктов. Каждый продукт имеет идентификатор владельца. Я пытаюсь вызвать другую конечную точку API, чтобы получить имя владельца и назначить его текущему итератору.

Мой код до сих пор

<script> 
    var config = require('../config'); 
    export default { 
     data() { 
      return { 
       products: [], 
      } 
     }, 
     ready() { 
      this.getProducts().then(t => { 
       console.log(t); 
      }); 
     }, 
     methods : { 
      getProducts : function() { 
       let url = config.API.GetProduct 

       this.$http.get(url).then(response=> { 
        this.products = response.data.resource; 
        var p = this.products.map(this.getOwner); 
        return Promise.all(p); 

       }, error=> { 
        console.error("An error happened!") 
       }); 
      }, 
      getOwner : function(product) { 
       let url = config.API.GetProductOwnerName.replace('[$$$]', product.OwnerID); 
       var p = new Promise(); 

       this.$http.get(url).then(response => { 
        product.OwnerID = response.data.resource[0].OwnerName; 
        p.resolve(currentObj); 
       }); 

       return p; 

      } 
     } 
     components: {} 
    } 
</script> 

ошибка, я столкнулся

Теперь всякий раз, когда я пытаюсь сделать это, я получаю следующие ошибки

Uncaught TypeError: Cannot read property 'then' of undefined 
Uncaught (in promise) TypeError: Promise resolver undefined is not a function(…) 

Может кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно здесь?

Благодаря

ответ

0

Вам не нужно воссоздать новый объект обещание. Вы можете просто вернуть объект, который хотите передать, на следующий вызов.

getProducts: function() { 
    let url = config.API.GetProduct 

    return this.$http.get(url).then(response => { 
     this.products = response.data.resource; 
     return this.products.map(this.getOwner); 
    }, error=> { 
     console.error("An error happened!") 
    }); 
}, 
+0

Спасибо. Но у меня все еще такая же проблема. – Gagan

+0

@Gagan выглядит хорошо для меня здесь https://jsfiddle.net/3q5cwuha/ – Hkan

+0

Я видел ваш код. таким образом даже мой код работает. что я действительно хочу сделать, поскольку у меня, ИМО, есть много продуктов, которые я хочу обрабатывать с помощью обещаний. В вашем случае, поскольку это очень маленький объект, обещание быстро разрешается и, следовательно, вы видите сообщение. Возможно, я ошибаюсь, но это то, что я думаю. – Gagan

 Смежные вопросы

  • Нет связанных вопросов^_^