2016-09-30 30 views
0

我有一個產品組件和一個產品所有者組件。每一種產品都會有一個所有者VueJS Promise is failing

我試圖通過調用API端點做

我收到的產品列表。當承諾解決後,我有一個產品列表。每個產品都有一個OwnerID。我正在嘗試調用另一個API端點來獲取所有者的名稱並將其分配給正在迭代的當前產品。

到目前爲止我的代碼,我面臨

現在,每當我試圖做到這一點,我不斷收到以下錯誤

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

<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> 

錯誤有人能讓我知道我在這裏做錯了嗎?

謝謝

回答

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