2017-10-16 77 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',即使它是空的。

我删除了标签,现在它按预期工作。