new Promise
new Promise(function(function resolve, function reject) resolver) -> Promise
Создать новую промис. Переданная функция получит функции resolve и reject в качестве аргументов, которые можно вызвать для определения судьбы созданной промис.
Примечание: См. явный шаблон создания антипаттернов перед самостоятельным созданием промисов
Пример:
function ajaxGetAsync(url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest;
xhr.addEventListener("error", reject);
xhr.addEventListener("load", resolve);
xhr.open("GET", url);
xhr.send(null);
});
}
Если вы передадите объект промис в функцию resolve, созданная промис будет следовать состоянию этой промис.
Чтобы убедиться, что функция, возвращающая промис, следует неявной, но критически важной контракту промисов, можно начать функцию с new Promise, если цепочку нельзя начать немедленно:
function getConnection(urlString) {
return new Promise(function(resolve) {
//Without new Promise, this throwing will throw an actual exception
var params = parse(urlString);
resolve(getAdapter(params).getConnection());
});
}
Это гарантирует, что getConnection выполняет контракт функции, возвращающей промис, и никогда не выбрасывает синхронное исключение. Также см. Promise.try и Promise.method
Резолвер вызывается синхронно (следующее предназначено для документации и не является образцом кода):
function getPromiseResolveFn() {
var res;
new Promise(function (resolve) {
res = resolve;
});
// res is guaranteed to be set
return res;
}
© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/new-promise.html