new Promise
new Promise(function(function resolve, function reject) resolver) //-> Promise
创建一个新的 promise。传入的函数将接收函数 resolve
和 reject
作为它的参数,它可以被调用来封装所创建的 promise 的命运(fate,完成还是拒绝)。
注意: 在创建你自己的 promise 之前,请参见 显示的构造 anti-pattern
示例:
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);
});
}
如果将一个 promise 对象传递到 resolve
函数,创建出来的 promise 将遵循这个 promise 的状态。
为了确保一个返回 promise 的函数遵循了隐含但非常重要的 promise 契约,如果你不能立即启动一个链,你就可以使用 new Promise
启动一个函数:
function getConnection(urlString) {
return new Promise(function(resolve) {
// 没有 new Promise,这里抛出将抛出一个实际的异常
var params = parse(urlString);
resolve(getAdapter(params).getConnection());
});
}
上面确保 getConnection
满足一个 promise 返回函数的契约,该函数从不抛出同步异常。也请查看
和 Promise.try
Promise.method
resolver 是同步调用的(以下是用于文档化的目的,而不是惯用代码):
function getPromiseResolveFn() {
var res;
new Promise(function (resolve) {
res = resolve;
});
// res is guaranteed to be set
return res;
}