Promise属于异步编程范式,并不是完全可以提供给异步编程,而是提供了一种异步结果回调的模式。
var preloadImage = function (path) {
return new Promise(function (resolve, reject) {
var image = new Image();
image.onload = resolve;
image.onerror = reject;
image.src = path;
});
};
preloadImage("http://www.yourdomain.com/images/icon_test.png").then(function(){
console.log('load success');
},function(){
console.log('load failed');
}).then(function(){
console.log('load success');
},function(){
console.log('load failed');
});
在看一个例子,参数传递的(我们使用ajax同步,也能发现)
function search(term) {
var url = 'http://example.com/search?q=' + term;
var xhr = new XMLHttpRequest();
var result;
var p = new Promise(function (resolve, reject) {
xhr.open('GET', url, true);
xhr.onload = function (e) {
if (this.status === 200) {
result = JSON.parse(this.responseText);
resolve(result);
}
};
xhr.onerror = function (e) {
reject(e);
};
xhr.send();
});
return p;
}
search("Hello World").then(console.log, console.error);
当然我们还可以直接调用,下面的实现是异步的
Promise.resolve().then(function(){});
Promise.reject().then(function(){},function(){});