2017-10-16 79 views
0

我使用VueJs創建了一個小示例應用程序,並創建了一個C#REST API來存儲和檢索SQL Server後端中的數據。JavaScript - Promise實現得太早?

爲了測試,我創建了一個帶有表單的簡單網頁來創建一個「註釋」。

saveData() 
    { 
     let promiseStack = []; 
     var jsondata = JSON.stringify(this.note); 

     promiseStack.push(this.$http.post('REST_API/note', jsondata)); 

     Promise.all(promiseStack).then(data => 
     { 
      this.$http.get('REST_API/note'); 
      this.$router.push({ name: 'viewnotes', params: { id: data[0].body.id }}) 
     }, error => 
     { 
      console.log(error); 
     });  
    } 

我試圖用一個承諾要等到在後臺的「存儲」操作完成,併發出GET請求來檢索所有:該說明是由下面的函數,「SAVEDATA()」存儲一旦諾言得到滿足,就會注意到。

但是,承諾內的獲取請求不返回任何數據。如果稍後手動發出獲取請求,我將檢索之前存儲的數據。

所以我看了一下C#REST API。目前有兩個函數:createNote(...),getAllNotes(...)。我使用StreamWriter在使用毫秒級精度調用這些函數時登錄到文件系統。我看到的是'createNote'在'getAllNotes'之後被調用。所以我懷疑這個API工作正常,但是我使用承諾的方式似乎是錯誤的。

也許有人有提示?

UPDATE

  • 我知道GET請求不使用在Chromium開發者工具欄返回任何數據。響應是空

  • 在網絡選項卡中的開發者工具欄顯示,該請求被以正確的順序提交,因此,「POST」請求發出第一

+0

你怎麼知道GET請求沒有返回任何數據? – deceze

+1

你的瀏覽器的網絡檢查員說什麼請求被觸發的順序是什麼? – deceze

+2

如果網絡選項卡按正確的順序顯示請求,但系統調用發生亂序,則API聽起來像是損壞的部分。 – ssube

回答

0

看來我發現這個問題。我在'Save'鏈接中有一個'href'標籤,這觸發了一個早期路由。預期的'POST'和'GET'被正確解僱,但由於鏈接中的'href'標籤,在某處存在另一個'GET',即使它是空的。

我刪除了標籤,現在它按預期工作。