2016-06-13 3 views
0

Я довольно новичок в материале Node, поэтому заранее извиняюсь, если это довольно простой.agreement.all then структура не работает как ожидалось

Я пытаюсь вызвать функцию один раз, три асинхронные функции уже закончены. Это мой подход:

Первый файл: ./promise.js var reqHandler = require ('./ asyncTesting'); var Promise = require ('bluebird');

var listOfMed = ["med1","med2","med3"]; 

function postMethod() { 
    console.log("Post done"); 
} 

reqHandler.reqHandler(listOfMed) 
    .then(function() { 
    console.log("Post done"); 
}); 

Второй файл:

./asyncTesting.js 
var Promise = require('bluebird'); 

function function2() { 
    // all the stuff you want to happen after that pause 
    console.log("Requesting json for med2"); 
} 

function callFunction(method){ 
    if (method =="med2"){ 
     setTimeout(function2, 3000); 
    }else{ 
     console.log("Requesting json for "+method); 
    }  
} 

function reqHandler(listOfMed) { 
return Promise.all(listOfMed.map(callFunction)); 
} 

exports.reqHandler = reqHandler; 

ожидается выход будет:

Requesting json for med1 
Requesting json for med3 
Requesting json for med2 
Post done 

Однако , что я действительно получил на консоли:

Requesting json for med1 
Requesting json for med3 
Post done 
Requesting json for med2 

Заранее спасибо

+0

Для того чтобы 'listOfMed.map (callFunction)' иметь какое-либо значение, лучше убедиться, что 'callFunction' что-то возвращает. –

ответ

1
function callFunction(method){ 
    return new Promise(function(resolve,reject){ 
     if (method =="med2"){ 
      setTimeout(function(){function2();resolve()}, 3000); 
     }else{ 
      console.log("Requesting json for "+method);resolve(); 
     } 
    }); 
} 

Promise.all означает, когда все обещания, данные закончены, он вернется. Ваш код имеет три обещания, хотя есть отложенная часть, но функция будет завершена напрямую.

+0

Вы прав. Я не понял, что время было выполнено, передав функцию2 в качестве аргумента. Благодаря! действительно полезно – shockes

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