es6学习笔记5--promise

前端开发 作者: 2024-08-25 23:25:01
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,
  • 无法取消Promise,一旦新建它就会立即执行,无法中途取消。
  • 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部
  • 处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
var promise = new Promise(function(resolve,reject) {
  // ... some code

  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
promise.then((value) {
   success
},(error) {
   failure
});
getJSON("/posts.json").then((posts) {
   ...
}).catch( 处理 getJSON 和 前一个回调函数运行时发生的错误
  console.log('发生错误!',error);
});
p.then((val) => console.log("fulfilled:"catch((err) => console.log("rejected:" 等同于

p.then((val) => console.log(fulfilled:"
 bad
promise
  .then((data) {
     success
  },1)">(err) {
     error
  });

 good
function(data) { cb
     success
  })
  . error
  });
var p = Promise.all([p1,p2,p3]);
  • 只有p1p2p3的状态都变成fulfilledp的状态才会变成fulfilled,此时p1p2p3的返回值组成一个数组,传递给p的回调函数。
  • 只要p1p2p3之中有一个被rejectedp的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
 生成一个Promise对象的数组
var promises = [2,3,5,7,11,13].map( (id) {
  return getJSON("/post/" + id + ".json");
});

Promise.all(promises).then( (posts) {
  (reason){
   ...
});



var p = Promise.race([p1,p3]);
var p = Promise.race([
  fetch('/resource-that-may-take-a-while'), (resolve,reject) {
    setTimeout(() => reject(new Error('request timeout')),5000)
  })
])
p.then(response => console.log(response))
p.catch(error => console.log(error))
var jsPromise = Promise.resolve($.ajax('/whatever.json'));
Promise.resolve('foo')
 等价于
new Promise(resolve => resolve('foo'))
let thenable = {
  then: );
  }
};
let thenable =);
  }
};

let p1 = Promise.resolve(thenable);
p1.then((value) {
  console.log(value);   42
});
var p = Promise.resolve('Hello');

p.then( (s){
  console.log(s)
});
 Hello
 Promise.resolve();

p.then( () {
   ...
});
var p = Promise.reject('出错了');
var p = new Promise((resolve,reject) => reject('出错了'))

p.then(null,1)"> 出错了

done()

asyncFunc()
  .then(f1)
  .catch(r1)
  .then(f2)
  .done();
Promise.prototype.done =  (onFulfilled,onRejected) {
  this.then(onFulfilled,onRejected)
    . (reason) {
       抛出一个全局错误
      setTimeout(() => { throw reason },0);
    });
};

finally()

server.listen(0)
  .then( () {
     run test
finally(server.stop);
Promise.prototype.finally =  (callback) {
  let P = .constructor;
  return .then(
    value  => P.resolve(callback()).then(() => value),reason => P.resolve(callback()).then(() => { throw reason })
  );
};


原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68655.html
es6学习笔记5--promise