2015-12-14 2 views
0

У меня Этот код javascript не работает нормально.Как исправить асинхронную функцию в этом коде

var asyncFunction = function() { 

    setTimeout(function() { 
     return 'accepted'; 
    }, Math.floor(Math.random() * 5000)); 
}; 
var Applicant; 
(Applicant = function (applicant_name_var, applicant_age_var) { 
    name = applicant_name_var; 
    a = applicant_age_var; 
    return { 
     who_AM_I: function() { 
      if (name == null) { return 'No Name'; } 
      else { 
       return name; 
      } 
     }, 
     isAdult: function() { 
      if (a == null) { 
       return false; 
      } else 
       if (a < 18) { 
        return false; 
       } else { 
        return true; 
       } 
     }, 
     INTERVIEWRESULT: function() { 
      var result = 'pending'; 
      result = asyncFunction(); 
      return result; 
     } 
    }; 
}).call(); 
console.log('debut'); 
var pending_APPLICANT = []; 
var accepted_APPLICANT = []; 
var applicant1 = new Applicant('John Doe'); 
var applicant2 = new Applicant(); 
var applicant3 = new Applicant('Jane Doe', 24); 
pending_APPLICANT.push(applicant1); 
pending_APPLICANT.push(applicant2); 
pending_APPLICANT.push(applicant3); 
if (applicant1.INTERVIEWRESULT() == 'accepted') { 
    accepted_APPLICANT.push(applicant1); 
    pending_APPLICANT.splice(1, 2); 
} 
if (applicant2.INTERVIEWRESULT() == 'accepted') { 
    accepted_APPLICANT.push(applicant2); 
    pending_APPLICANT.splice(1, 1); 
} 
if (applicant3.INTERVIEWRESULT() == 'accepted') { 
    accepted_APPLICANT.push(applicant3); 
    pending_APPLICANT.splice(0, 1); 
} 
console.log('Pending applicants:'); 
for (var i = 0; i < pending_APPLICANT.length; i++) { 
    console.log(pending_APPLICANT[i].toString()); 
} 
console.log('Accepted applicants:'); 
for (var i = 0; i < accepted_APPLICANT.length; i++) { 
    console.log(accepted_APPLICANT[i].toString()); 
} 

выход этого кода:

> debut 

> Pending applicants: 

> [object Object] 

> [object Object] 

> [object Object] 

> Accepted applicants: 

Ожидаемый результат что-то вроде этого:

> Pending applicants: 

> No one. 

> Accepted applicants: 

> Name: Jane Doe | Age: 24 | Adult: true 

> Name: John Doe | Age: Unknown | Adult: false 

> Name: No Name | Age: Unknown | Adult: false 

Я думаю, что проблема в asyuncFunction()

+0

* «не работает нормально» * не очень хорошее описание проблемы? Какой результат вы на самом деле получаете, а что не работает – adeneo

+0

И что вы в настоящее время получаете за результат? Любые ошибки в консоли? – mezmi

+0

Ошибка в консоли Я просто добавляю текущий вывод в описании –

ответ

0

Это:

var asyncFunction = function() { 

    setTimeout(function() { 
     return 'accepted'; 
    }, Math.floor(Math.random() * 5000)); 
}; 
result = asyncFunction(); 

Не собирается делать то, что следовало ожидать.

Вы не можете вернуть то, что будет определено в задаче async.

Пожалуйста, взгляните на this question.

Что вы можете сделать, так это передать функцию обратного вызова на asyncFunction и вызвать ее с желаемым значением при ее разрешении.

var asyncFunction = function (cb) { 
    setTimeout(function() { 
     cb('accepted'); 
    }, Math.floor(Math.random() * 5000)); 
}; 

Это требует больше изменений в вашем коде, но вы получаете эту идею.

Вот как вы можете использовать функцию позже в коде:

asyncFunction(function (result) { 
    console.log(result); //accepted 
}); 
Смежные вопросы