簡體   English   中英

如何等待另一個承諾填充的數組

[英]How to wait on an array being filled by another promise

d3正在加載全局數組。 我想在另一個函數中調用該數據。

我不太了解諾言,也無法破譯文檔。

第一個調用的功能是:

d3.tsv( ... ).then(function(data){Loaded_Data[0]=data);}

然后調用一個函數來填充我的svg:

svg.getElementById("example") = Loaded_Data[0][Loaded_Data[0].length-1]['Example Column'] 

我只是想不出如何編碼:“向我保證這個數組中有數據,然后進行值賦值”

請盡可能明確和明顯。 謝謝。

您可以使用ES8功能async/await ,假設您正在執行一個名為foo的函數中的邏輯,

// If you are using await inside a function it should be declared as async
async function foo(){

// await will make sure to pause the execution till the promise is resolved
Loaded_Data[0]=await d3.tsv( ... );

svg.getElementById("example") = Loaded_Data[0][Loaded_Data[0].length-1]['Example Column'] 

}

有關async/await更多信息,這是一篇很棒的文章,

https://alligator.io/js/async-functions/

如果您的2個代碼段位於相同的.js文件中,則您可以執行以下操作:

d3.tsv( ... ).then(function(data){
    Loaded_Data[0]=data;
    svg.getElementById("example") = Loaded_Data[0][Loaded_Data[0].length-1]['Example Column'];
}

如果不是這種情況,則可以使用Observable ,也可以觸發從.then內部調用的自定義事件。

d3.tsv( ... ).then(function(data){
     Loaded_Data[0]=data;
     var event = new Event('Loaded_Data_HasData');
     window.dispatchEvent(event);
}

然后在您的其他文件/位置中監聽該事件。

elem.addEventListener('Loaded_Data_HasData', function (e) { 
    svg.getElementById("example") = Loaded_Data[0][Loaded_Data[0].length-1]['Example Column']; 
}, false);

暫無
暫無

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

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