2017-08-24 12 views
0
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(); 

} 

DOMに値を表示する前に、基本操作が完了し、JSON.parseが終了するまで待つ必要があります。非同期が機能していないと私に伝えられるたびに、以前の呼び出しの値が得られます。公平であるためには、私は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; 
} 
+0

おそらく 'basic'にエラーがあります。 –

+0

基本は、APIでJS関数を呼び出すことです。本当にそれを使いこなしたくはありません。 – Zachscs

+3

あなたは 'basic'で約束を返していません – MinusFour

答えて

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); 
}); 
+0

どこでどのように私は約束を使用しますか?私はこのゲームの初心者です。 – Zachscs

+0

かなり役に立ちましたが、コードを3つの部分に分割する必要があると思います。別のmyPromiseを追加するにはどうすればいいですか。 – Zachscs

+0

promise.all()を使用する約束事の配列を作成してみてください。このリンクにはhttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all – iTR

3

あなただけawait約束とbasicは約束を返していないことができます。あなたはまた、Bergi said in their comment何を考え

​​

を行う必要があります。


1:実は、あなたは任意の値をawaitことができますが、約束ではない何かをINGのawaitても意味がありません。 ではないbasicから約束を返すと、lsEnteredはローカルストレージが設定されるのを待たないでしょう。

+0

があります。dbx.filesListFolderの返却をどこかの約束として宣言する必要はありますか? – Zachscs

+0

おそらく。私はこれを見つけました:https://stackoverflow.com/q/43647793/218196 –

+0

私は3時間をタイピングで作業しようとしましたが、代わりにこれを行うことに決めました:( – Zachscs

関連する問題