二つの非同期が終了し、第三の関数を同期して実行します.

12247 ワード

1.js用Promise方法
//      GeoJSON     
//                Promise    
function getArea () {
  return new Promise((resolve, reject) => {
    fetch('./resources/china.json').then(resp =>
      resp.json().then(china => resolve(china))
    )
  })
}

//           
function getPopulation () {
  return new Promise((resolve, reject) => {
    fetch('./resources/china-population.json').then(resp =>
      resp.json().then(data => resolve(data))
    )
  })
}

//         
function getCity () {
  return new Promise((resolve, reject) => {
    fetch('./resources/city.json').then(resp =>
      resp.json().then(data => resolve(data))
    )
  })
}

//    Promise.all               ,      
Promise.all([getArea(), getPopulation(), getCity()]).then(values => {
  //                      
  let china = values[0]
  let population = values[1]
  let city = values[2]
  //     
  doWithData(china, population, city)
})
二つの逐次実行が必要なら、thenで接続できます.順序を要求しないなら、一つの配列に入れて、Promise.allで実行できます.
2.jqueryは$whenで同時実行します.全部終わったら戻ります.一つの要求が間違ったらエラーで返します.
$.when($.ajax({
  url: "test1.html",
  data:data1,
}),$.ajax({
  url: "test2.html",
  data:data2,
})).done(function(data1,data2){
    console.log('2 ajax     ,   ajax       '); 
}).fail(function(){
    console.log('2 ajax     ');
})
$.when($.ajax({
  url: "test1.html",
  data:data1,
}, $.ajax({
  url: "test2.html",
  data:data2,
})).then(function(data1,data2){
      console.log('2 ajax     ,  ajax       ');
},function(error){
      console.log('  ');
})
doneとthenは違います.thenは成功と失敗のコールバック関数を含めてdone()とfail()を一緒に書くことができます.doneの中のコールバック関数は成功だけです.