一. Callback (回调函数)
1.定义:把函数当作变量传到另一个函数里,传进去之后执行甚至返回等待之后的执行。
2.一个简单的例子
function add_callback(p1, p2 ,callback) {
var my_number = p1 + p2;
callback(my_number);
}
add_callback(5, 15, function(num){
console.log("call " + num);
});
3 error first
1).回调函数的第一个参数保留给一个错误error对象,如果有错误发生,错误将通过第一个参数err返回。
2).回调函数的第二个参数为成功响应的数据保留,如果没有错误发生,err将被设置为null, 成功的数据将从第二个参数返回。
4.callback hell
JavaScript 是由事件驱动的异步编程,一个异步的操作,我们在调用他的时候,不会马上得到结果,而是会继续执行后面的代码。这样,如果我们需要在查到结果之后才做某些事情的话,就需要把相关的代码写在回调里面,如果涉及到多个这样的异步操作,就势必会陷入到回调地狱中去。eg:
fs.readdir(source, function (err, files) {
if (err) {
console.log('Error finding files: ' + err)
} else {
files.forEach(function (filename, fileIndex) {
console.log(filename)
gm(source + filename).size(function (err, values) {
if (err) {
console.log('Error identifying file size: ' + err)
} else {
console.log(filename + ' : ' + values)
aspect = (values.width / values.height)
widths.forEach(function (width, widthIndex) {
height = Math.round(width / aspect)
console.log('resizing ' + filename + 'to ' + height + 'x' + height)
this.resize(width, height).write(dest + 'w' + width + '_' + filename, function(err) {
if (err) console.log('Error writing file: ' + err)
})
}.bind(this))
}
})
})
}
})
二. Promise(为了解决callback hell的问题)
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。ES6将其写进了语言标准,统一了用法,原生提供了Promise对象。
1. Promise A+规范:
Promise 规范有很多,如 Promise/A,Promise/B,Promise/D 以及 Promise/A 的升级版 Promise/A+,最终 ES6 中采用了 Promise/A+ 规范。Promise/A+ 官网:https://promisesaplus.com/
2.promise对象的特点
1.对象的状态不受外界影响,promise对象代表一个异步操作,有三种状态,pending(进行中)、fulfilled(已成功)、rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态,这也是promise这个名字的由来“承诺”;
2.一旦状态改变就不会再变,任何时候都可以得到这个结果,promise对象的状态改变,只有两种可能:从pending变为fulfilled,从pending变为rejected。这时就称为resolved(已定型)。如果改变已经发生了,你再对promise对象添加回调函数,也会立即得到这个结果,这与事件(event)完全不同,事件的特点是:如果你错过了它,再去监听是得不到结果的。
3. 创造了一个Promise实例
var promise = new Promise( function( resolve, reject) {
/some code
if(//异步操作成功){
resolve(value);
}else{
reject(error);
}
});
4.Promise 方法:
Promise.prototype.then = function() {
}
Promise.prototype.catch = function() {
}
Promise.resolve = function() {
}
Promise.reject = function() {
}
Promise.all = function() {
}
Promise.race = function() {
}
1).promise.then方法返回promise的结果,then 的第一个参数是处理正确时的返回值的函数,第二个参数是处理错误时的返回的error的函数
promise.then(function(value) {
// success
}, function(error) {
// failure
});
2).promise.catch可以捕获promise返回的错误
var promise = new Promise(function(resolve, reject) {
throw new Error('test');
});
promise.catch(function(error) {
console.log(error);
});
3).Promise.resolve 是将一个值包裹成 promi