簡體   English   中英

這個異步功能怎么了?

[英]What's wrong with this async function?

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();

}

我想等到basic完成並且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;
}
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);
});

您只能await諾言1,basic不返回諾言。 你需要做

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

還要考慮貝爾吉在評論中所說的話


1:實際上,您可以await任何值,但是await不是承諾的事情毫無意義。 通過basic返回promise, lsEntered將不等待設置本地存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM