2016-02-24 7 views
-1

У меня есть 2 CSV-что я пытаюсь читать, после чего я использую данные в этих двух, чтобы сделать материал:jQuery Обещания не работают?

function getData() { 

    var deferredObject = $.Deferred(); //representation of some asynchronous work 
    d3.csv("./parse_shp.csv", function(data) { 
    console.log(data); 
    shp_array = data; 
    }); 

    d3.csv("./fao_coutnry_shp.csv", function(data) { 
    console.log(data); 
    fao_array = data; 
    }); 

    //once both of those are done, resolve the promise 
    deferredObject.resolve(); 

    return deferredObject.promise(); 
} 

function LevenshteinDistance() { 
    console.log("do stuff with the data"); 
} 

//call LevenDistance after the promise has been resolved 
getData().then(LevensteinDistance()); 

Но это не работает ... он будет печатать строку "do something with the data" перед тем печать данных csv.

Что я делаю неправильно? В качестве примера я использовал ссылку this.

Я не понимаю, как подключиться deferredObject и getData()? Потому что, даже если я создаю отложенный объект в функции, не будет ли он просто асинхронно считывать csv в любом случае, а затем ошибочно называть defferedObject.resolve()?

В любом случае, я новичок в обещаниях, поэтому любая помощь будет принята с благодарностью!

+0

Вы решаете обещание перед тем, как любой из методов .csv завершил работу. –

+0

@KevinB Спасибо! Итак, как мне решить проблему после их завершения? Должен ли я связывать обещание с методами csv? – ocean800

+1

'getData(). Then (LevensteinDistance());' является ошибкой, вы не должны CALL LevensteinDistance и передать свое возвращаемое значение 'then', вы должны просто передать' LevensteinDistance' (функцию) без '()' после это – doug65536

ответ

2

Аргумент .then() должен быть функцией. Вы звоните функция сразу, потому что вы имеете () после имени функции. Должно быть:

getData().then(LevenshteinDistance); 
+1

OP также * разрешает * отложенное немедленно, а не после выполнения 2 d3 обратных вызовов. – Brandon

+0

Да, я это вижу, но я не достаточно знаком с d3.js, чтобы узнать, как это исправить. Возвращает ли 'd3.csv()' обещание? – Barmar

+0

Это одна из моих проблем, спасибо! Думаю, мой вопрос заключается в том, как бы разрешить отложенные объекты после того, как были выполнены обратные вызовы 2 d3? Должен ли я иметь обещание для каждого из методов csv? – ocean800

Смежные вопросы