简单来讲,promise
是ES6一个API、构造函数
,也是一种规范,更是一种·解决callcack深层嵌套·的方案,还是一种带有then
方法支持链式操作的框架.
Javascript的特点是异步,Javascript不能等待,如果你实现某件需要等待的事情,你不能停在那里一直等待结果回来,相反,底线是使用回调callback:你定义一个函数,这个函数只有等到结果返回时才能被调用。
那么为什么这样做好处优于回调呢?标准的回调模式在我们处理请求时需要同时提供回调函数:
request(url, function(error, response) { // handle success or error. }); doSomethingElse();
很不幸,这段代码意味着这个request函数并不知道它自己什么时候能够完成,当然也没有必要,我们最终通过回调传递结果。这会导致多个回调形成了嵌套回调,或者称为回调陷阱。
queryTheDatabase(query, function(error, result) { request(url, function(error, response) { doSomethingElse(response, function(error, result) { doAnotherThing(result, function(error, result) { ... }); }); }); });
Promise能够解决这种问题,允许低层代码创建一个request然后返回一个对象,其代表着未完成的操作,让调用者去决定应该加入什么回调。 因为then返回一个promise,它意味着promise能够被chain串行链条花,这样能避免回调地狱:
//by zhengkai.blog.csdn.net queryTheDatabase() .then(request) .then(doSomethingElse) .then(doAnotherThing) .then(...)