2017-06-01 222 views
1

爲什麼沒有在這個非常小的例子中調用.await函數?d3.queue.await函數未被調用

http://jsfiddle.net/x2fkvsco/

HTML

<h1>test</h1> 
<div id="a"></div> 
<div id="b"></div> 

JS

d3.queue() 
    .defer(a,1) 
    .await(b,2); 

function a(x){ 
    d3.select('#a').text("a is executing with x="+x); 
} 

function b(err,x){ 
    d3.select('#b').text("b is executing with x="+x); 
} 

輸出

test 
a is executing with x=1 
+2

它位於[docs]的第一句話(https://github.com/d3/d3-queue#queue_defer):*「回調必須在任務完成時由任務調用。 「*。 – altocumulus

回答

4

@altocumulus打我給它用富有洞察力的評論,但由於一個例子講千言萬語:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script src="https://d3js.org/d3.v4.min.js"></script> 
 
</head> 
 

 
<body> 
 
    <h1>test</h1> 
 
    <div id="a"></div> 
 
    <div id="b"></div> 
 
    <script> 
 
    var q = d3.queue() 
 
     .defer(a, 1, 2) 
 
     .await(b); 
 

 
    function a(x, y, callback) { 
 
     d3.select('#a').text("a is executing with x=" + x); 
 
     callback(null, y); 
 
    } 
 

 
    function b(err, x) { 
 
     d3.select('#b').text("b is executing with x=" + x); 
 
    } 
 
    </script> 
 
</body> 
 

 
</html>

+0

謝謝,現在我明白了!如果可以的話,我會接受這兩個答案,但我會拿這個。 –

3

它在的docs第一個句子:

回調必須在完成時由任務調用。

要符合你需要調用回調,這是作爲最後一個參數提供給您的功能a()的API:

function a(x, callback) { 
    d3.select('#a').text("a is executing with x="+x); 
    callback(null, { /* result */ }); 
}