Promise对象用于包装异步函数执行结果,以便用同步的方式处理其结果。javascript
var mypromise = new Promise(function(resolve, reject){ // asynchronous code to run here // call resolve() to indicate task successfully completed // call reject() to indicate task has failed })
mypromise.then( function(successurl){ document.getElementById('doggyplayground').innerHTML = '<img src="' + successurl + '" />' }, function(errorurl){ console.log('Error loading ' + errorurl) } )
promise 包含3种状态:java
pending: 初始状态数组
fulfilled: 完成状态promise
rejected: 失败状态app
then()返回一个Promise对象 或者构造一个空白的Promise对象(如Promise.resolve()返回一个初始状态是fulfilled的延迟对象)异步
var twodoggypromises = [getImage('dog1.png'), getImage('dog2.png')] Promise.all(twodoggypromises).then(function(urls){ console.log(urls) // logs ['dog1.png', 'dog2.png'] }).catch(function(urls){ // if any image fails to load, then() is skipped and catch is called console.log(urls) // returns array of images that failed to load })
Promise.all([]) 参数传入Promise对象数组 then中获得结果的数组 Promise.all() takes an iterable (array or array-like list) of promise objects, and waits until all of those promises have been fulfilled before moving on to any then() method attached to it. The then() method is passed an array of returned values from each promise.async
使用map函数
var doggies = ['dog1.png', 'dog2.png', 'dog3.png', 'dog4.png', 'dog5.png'] var doggypromises = doggies.map(getImage) // call getImage on each array element and return array of promises var sequence = Promise.resolve() doggypromises.forEach(function(curPromise){ // create sequence of promises to act on each one in succession sequence = sequence.then(function(){ return curPromise }).then(function(url){ var dog = document.createElement('img') dog.setAttribute('src', url) doggyplayground.appendChild(dog) }).catch(function(err){ console.log(err + ' failed to load!') }) })