2015-08-29 3 views
-1

Не могли бы вы взглянуть на this Demo и сообщить мне Почему я не могу правильно создать и использовать обещание?Проблема с созданием обещания в Javascript

var projectInfo = []; 
 
var projectPromise; 
 
var thePromissedProjects; 
 
var projects = [{ 
 
    "ProjectID": "15260", 
 
    "Longitude": "-118.641508", 
 
    "Latitude": "51.949915", 
 
}, { 
 
    "ProjectID": "17043", 
 
    "Longitude": "-125.444557", 
 
    "Latitude": "51.097552", 
 
}, { 
 
    "ProjectID": "12910", 
 
    "Longitude": "-130.759074", 
 
    "Latitude": "57.128581", 
 
}, { 
 
    "ProjectID": "15204", 
 
    "Longitude": "-117.947302", 
 
    "Latitude": "52.363281", 
 
}, { 
 
    "ProjectID": "15237", 
 
    "Longitude": "-118.338717", 
 
    "Latitude": "52.013140", 
 
}, { 
 
    "ProjectID": "17040", 
 
    "Longitude": "-125.142283", 
 
    "Latitude": "51.125719", 
 
}, { 
 
    "ProjectID": "12961", 
 
    "Longitude": "-130.430823", 
 
    "Latitude": "57.022356", 
 
}, { 
 
    "ProjectID": "14677", 
 
    "Longitude": "-119.387702", 
 
    "Latitude": "51.896785", 
 
}, { 
 
    "ProjectID": "15212", 
 
    "Longitude": "-118.104450", 
 
    "Latitude": "52.242352", 
 
}]; 
 
projectPromise = new Promise(function() { 
 
    for (var i = 0; i < projects.length; i++) { 
 
     thePromissedProjects = projects[i]; 
 
     } 
 
    return thePromissedProjects; 
 

 
}); 
 
projectPromise.then(printPromisses); 
 

 
function printPromisses(p){ 
 
    console.log(p.ProjectID); 
 
    
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Хммм, ваш код действительно создает обещание, но он нигде не используется, поэтому, как вы знаете, что он не работает? – Gusman

+0

Этот код не имеет смысла. Что ты пытаешься сделать? – Tomalak

+0

@Gusman, спасибо за комментарий, но как я могу его проверить? Я уже пробовал 'projectPromise();' в конце фрагмента, но я получил ошибку 'Uncaught TypeError: projectPromise не является функцией' – Suffii

ответ

0

Вам необходимо разрешить или отклонить обещание, прежде чем какой-либо обратный вызов будет вызван.

projectPromise = new Promise(function (resolve, reject) { 
    resolve(projects[0]); 
}); 

Отпечатки 15260. См. fiddle

Вы можете разрешить или отклонить обещание только один раз. Поэтому, если вы намеревались перебирать проекты и позволять обратный вызов выполняться один раз за итерацию, это не сработает.