es6面试问题——Promise

     

   话说刚换工做一个月有余,在上家公司干的实在是不开心,而后就出来抱着试试的心态出来面了几家公司,大多数公司问的前端问题也就那么多,其中有个面试问题让我记忆犹新,只由于没有答上来,哈哈!前端

  当时面试官问我怎么解决回调函数里面回调另外一个函数,另外一个函数的参数须要依赖这个回调函数。如:es6




一个回调后面有不少依赖的回调,怎么解决这个问题?
我说封装,return 等等啊,但显然不是面试官想要的解决办法。回来之后问了一下同事,同事说es6 的Promise 能够解决啊,只怪我学识尚浅!而后我就查了一下,而后就豁然开朗了。$http.get(url).success(function (res) { if (success != undefined) { success(res); } }).error(function (res) { if (error != undefined) { error(res); } }); function success (data){ if(data.id != 0){ var url = "getdata/data?id="+data.id+""; $http.get(url).success(function (res) { showData(res); }).error(function (res) { if (error != undefined) { error(res); } }); } }

Promise面试

我只把我了解的到的记录下来,你们多多指点!
Promise 构造函数只接收一个函数,这个函数两个参数:resolve,reject,分别表示异步操做执行成功后的回调函数和异步操做执行失败后的回调函数。其实能够理解为成功和失败。你也许会说这有什么用?咱们用的时候有可不仅是 new Promise(function(resolve,reject){}) 就完了,Promise对象上有then、catch这两个方法,还有不少方法这里就不一一介绍了!
then接收一个参数,是函数,而且会拿到咱们在new Promise()中调用resolve时传的的参数。json

functin fun1(){ var a = new Promise(resolve,reject){ resolve(data); } return a ; } fun1().then(function(data){ console.log(data); })

你觉得这就完了?看别人是怎么用的:
then方法返回的是一个新的Promise实例。所以能够采用链式写法,即then方法后面再调用另外一个then方法。promise

getJSON("/posts.json").then(function(json) { return json.post; }).then(function(post) { // ... });

上面的代码使用then方法,依次指定了两个回调函数。第一个回调函数完成之后,会将返回结果做为参数,传入第二个回调函数。异步

采用链式的then,能够指定一组按照次序调用的回调函数。这时,前一个回调函数,有可能返回的仍是一个Promise对象(即有异步操做),这时后一个回调函数,就会等待该Promise对象的状态发生变化,才会被调用。函数

到这里就能够完美解决回调依赖回调的问题了!post

部分代码借鉴于:阮一峰es6入门 http://es6.ruanyifeng.com/#docs/promiseui

相关文章
相关标签/搜索