2017-04-18 40 views
0

我遇到了一个问题,使用d3-queue。这是我的代码:d3.queue永不触发.await函数

var dataQueue = d3.queue(); 
dataQueue.defer(collectData,ISBNs,locations) 
    .await(processData); 

哪里​​是做几个API调用(其中大量的到谷歌图书API)的功能。

现在的问题是,从来没有调用processData函数。我知道​​函数运行正常,因为我在return语句之前放置了一个print语句,以及其他一些print语句。

+1

你能提供'collectData()'的相关部分?它是否正确地调用传递给它的回调作为最后一个参数?你写了一个return语句,而任务回调不应该显式返回任何东西,但是。 – altocumulus

+0

@altocumulus感谢您的帮助,您让我意识到我应该调用回调函数而不是简单地返回! 我通过向我的'collectData'函数添加回调参数并调用此回调而不是返回语句来修复它。 –

回答

1

您不会在延迟任务​​和最终processData之间正确传递您的数据。文档如下(重点介绍):

#队列。 延迟任务 [,参数...])<>

添加指定异步任务回调队列中,与任何可选参数。 任务是一个函数,将在任务开始时调用。它通过指定的可选自变量附加回调作为最后一个参数; 回调必须在任务完成时调用。该任务必须使用两个参数调用回调:错误(如果有)以及结果的任务。

因此,通过递延任务功能processData的结果,你的函数collectData()必须是这样的:

function collectData(ISBNs, locations, callback) { 
    var error = null; // The error, if any 
    var data = { }; // The actual data to pass on 
    // ...collect your data... 

    // Pass the collected data (and the error) by invoking the callback. 
    callback(error, data); 
}