这个异步功能有什么问题?

时间:2017-08-24 02:05:06

标签: javascript angular typescript async-await

async lsEntered(){
  if(this.service.wd == '')
    {
      await basic((this.service.wd));
    }
    else
    {
      await basic(('/'+this.service.wd));
    }

    this.files = await JSON.parse(localStorage.getItem('FILENAMES'));

    var filesList = document.getElementById(this.trackLine.toString());
    var li;
    for (var i = 0; i < this.files.length; i++) {
    li = document.createElement('li');
    li.appendChild(document.createTextNode(this.files[i].name));
    filesList.appendChild(li);
  }

  localStorage.clear();

}

我想等到基本完成并且JSON.parse在显示DOM中的值之前完成。我每次都得到前一个呼叫的值,这告诉我异步不起作用。公平地说,我没有大量的TS经验。

编辑:这是基本的,我希望不必处理它,因为它是一个javascript函数,并且很容易集成到这个应用程序中。

var basic = function (path) {
    var ACCESS_TOKEN = '';
    var dbx = new Dropbox({ accessToken: ACCESS_TOKEN });
    dbx.filesListFolder({ path: path })
        .then(function (response) {
        localStorage.setItem('FILENAMES',JSON.stringify(response.entries));
        console.log(response);
    })
        .catch(function (error) {
        console.error(error);
    });
    return false;
}

2 个答案:

答案 0 :(得分:3)

let myPromise = new Promise((resolve, reject) => {
  // Work you want to execute
  resolve("I am done");
});

myPromise.then((successMessage) => {
  // successMessage is whatever we passed in the resolve(...) function above.

  console.log("Yay! " + successMessage);
});

答案 1 :(得分:3)

您只能await承诺 1 basic未返回承诺。你需要做

return dbx.filesListfolder(...)...

还要考虑Bergi said in their comment

1:实际上,你可以await任何价值,但await没有承诺的东西没有意义。通过basic返回承诺,lsEntered将不会等待设置本地存储。