Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript/vue.js async/await and.then(promise)不等待直到完成获取登录函数_Javascript_Vue.js_Async Await_Es6 Promise - Fatal编程技术网

javascript/vue.js async/await and.then(promise)不等待直到完成获取登录函数

javascript/vue.js async/await and.then(promise)不等待直到完成获取登录函数,javascript,vue.js,async-await,es6-promise,Javascript,Vue.js,Async Await,Es6 Promise,我构建了一个登录函数,并在后端服务器上检查凭据。我必须等待服务器的响应。我使用了es7-async-await.js的官方指南,但它不起作用。我已经尝试了async/Wait和Promissions提供的所有功能,但它根本不起作用。我阅读了所有关于这个问题的帖子。我做错了什么 我的职能: async getCredentials(pUser, pCipher) { var url = new URL(serviceURL); var params = { user: pUser

我构建了一个登录函数,并在后端服务器上检查凭据。我必须等待服务器的响应。我使用了es7-async-await.js的官方指南,但它不起作用。我已经尝试了async/Wait和Promissions提供的所有功能,但它根本不起作用。我阅读了所有关于这个问题的帖子。我做错了什么

我的职能:

async getCredentials(pUser, pCipher) {

  var url = new URL(serviceURL);
  var params = {
    user: pUser,
    p: pCipher
  }
  Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))

  // await response of fetch call
  let response = await fetch(url, {
    method: 'get',
    headers: { }
  });
  // only proceed once promise is resolved
  let data = await response.json();
  // only proceed once second promise is resolved
  return data;
},
我的函数调用:

this.getCredentials(this.input.username, cipher)
  .then(data => this.checkResponse = data.items)
  .catch(reason => console.log(reason.message))

console.log("data:  ->>>> " ,this.checkResponse);
结果是:


数据总是空的,因为函数不等待

您可以将console.log放入.then吗?。正在打印什么东西吗?。如果在未收到数据时执行console.log,则不会打印任何内容

this.getCredentials(this.input.username, cipher)
.then(data => 
    {
        this.checkResponse = data.items
        console.log("data:  ->>>> " ,this.checkResponse);       
    })
.catch(reason => console.log(reason.message))

哦,等等。。。您的
console.log(“数据:->>>”,this.checkResponse)
甚至在提取开始之前运行-因为提取是异步的,您不需要等待它在console.log之前完成-您需要在之后实现代码。然后/.catch不等待现在它在函数“data:->>>>>OK”中工作得很好,但是当我想访问变量this.checkResponse after时,变量为空again@RalfBordé您尝试使用它的地方不是“after”,而是“before”。@Estus Flask:我想访问.catch后面的变量。那么变量是空的:。catch((reason)=>console.log(reason.message));log(“数据:2->>”,this.checkResponse);您在接收数据之前使用了变量。当您执行get时,javascript代码将继续执行并到达console.log,该日志为空,因为get尚未完成。如果你想调用一个方法或使用路由器来完成登录,你应该在get完成后进行,所以你应该把它放在then中。@alpacino:好的,我明白了。我会把我的逻辑放在表格里。然后。非常感谢。