2015-05-15 2 views
-1

У меня есть функция load(), внутри которой я хочу позвонить функции, скажем download(), которые загружают xml-файл. Как только загрузка завершена, я должен вызвать функцию say parseXML(), которая анализирует загруженный XML-файл. Как только синтаксический анализ завершен, я должен вызвать другую функцию: processParsedXMLFile(). Можете ли вы, пожалуйста, направить меня, как я могу достичь этого самым простым способом?Асинхронное программирование в javascript

+0

' скачать(). затем (ParseXML) .then (processParsedXMLFile) '. –

+0

любая библиотека, которая будет включена? – prashanta

+0

Возможно, не зависит от вашей среды. –

ответ

0

Вы можете использовать обратные вызовы

load(params , function(){ 
    download(params, function(){ 
     parseXML(params, function(){ 
     processParsedXMLFile(params, function(){ 
      ... 
     }) 
     }) 
    }) 
}) 
+0

Я бы добавил также, что обратные вызовы обычно принимают параметр результата, а иногда и два параметра (ошибка и результат), или иногда есть два обратных вызова (один для ошибки и один для успеха). Итог - ПРОЧИТАЙТЕ DOCS функции async и обратите внимание на подпись обратного вызова. – Iftah

+0

также обратите внимание, что обычно IO-методы являются асинхронными (например, загружаемым ресурсом или ждут пользовательского события), но методы «process» и «parse» обычно синхронизируются. Снова - прочитайте документацию по функциям, которые вы используете. – Iftah

+0

Отличный ответ. О, подождите, это 2015 год. –

0

два общих подхода существуют для асинхронного кода в JavaScript - обратных вызовов и обещаний.

Есть много сообщений о том, как обсуждать обратный вызов и Javascript callback after json parse показывает хороший пример с подробным объяснением.

Для обещаний: http://wiki.commonjs.org/wiki/Promises/A и https://www.promisejs.org/ являются хорошим отправным пунктом для ознакомления с обещаниями, которые чаще встречаются для написания асинхронного кода в JavaScript.

В зависимости от того, где вы бежите вам скрипт, который вы, возможно, потребуется включить пакеты/библиотеки, чтобы иметь поддержку обещаний:

обещаниями будет выглядеть следующим образом (при условии, каждый из вызовов возвращает обещание, которое выполняется при завершении операции):

download() 
    .then(function(data){/* parse XML here */}) 
    .then(function(data){/* process parsed XML*/ });