回调地狱问题

2019-03-08  本文已影响0人  风之伤_3eed
    对于异步执行的代码无法保证它的执行顺序,就需要用回调函数来解决,但是当层级过多时就会有多层嵌套产生回调地狱的问题。

使用promise(es6中api)来解决回调地狱的问题。
promise
1、promise本身不是异步任务但是内部往往封装一个异步任务。
2、resolve方法实际上就是then方法传递的那个function

const myFirstPromise = new Promise((resolve, reject) => {
// 做一些异步操作,最终会调用下面两者之一:
// resolve(someValue); // fulfilled
// 或
// reject("failure reason"); // rejected
});

// 想要某个函数拥有promise功能,只需让其返回一个promise即可。
function myAsyncFunction(url) {
  return new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest();
      xhr.open("GET", url);
      xhr.onload = () => resolve(xhr.responseText);
      xhr.onerror = () => reject(xhr.statusText);
      xhr.send();
  });
};

then回调(第一个函数为成功的回调resolve, 第二个为失败的回调reject)

.then(function(data) {
    console.log(data)
    // 当return 123 后面的then接收到123
   // 当return一个p2(p2 为promise)时后续的then方法的第一个参数会作为p2的 resolve
    return 123
}, function (err) {
  console.log('读取文件失败')
})
.then(function(data) {
  console.log(data) //123
})
上一篇 下一篇

猜你喜欢

热点阅读