js处理异步一般都是用callback,但一旦涉及串联的异步请求,就会多层callback嵌套,导致代码的可读性很差,维护起来也是非常费劲。Promise规范的提出,可以说完全改变了 js异步编程的写法,让异步编程变得十分容易理解。
var p1 = new Promise(function(resolve, reject) { setTimeout(function() { resolve("Success!"); }, 1500); }); p1.then(function(value) { console.log(value); // Success! });
1.5s后控制台打印Success!
好了,我们先来认识一下 Promise/A+ 规范:
现在需要实现一个功能:抓取最新的一篇文章的作者的邮箱
流程就是:抓文章列表->抓文章資訊->抓作者
使用promise后,代码如下:
getArticleList().then(function(articles){ return getArticle(articles[0].id); }).then(function(article){ return getAuthor(article.authorId); }).then(function(author){ alert(author.email); }); function getAuthor(id){ return new Promise(function(resolve, reject){ $.ajax("http://beta.json-generator.com/api/json/get/E105pDLh",{ author: id }).done(function(result){ resolve(result); }) }); } function getArticle(id){ return new Promise(function(resolve, reject){ $.ajax("http://beta.json-generator.com/api/json/get/EkI02vUn",{ id: id }).done(function(result){ resolve(result); }) }); } function getArticleList(){ return new Promise(function(resolve, reject){ $.ajax( "http://beta.json-generator.com/api/json/get/Ey8JqwIh") .done(function(result){ resolve(result); }); }); }