二つの非同期が終了し、第三の関数を同期して実行します.
12247 ワード
1.js用Promise方法
2.jqueryは$whenで同時実行します.全部終わったら戻ります.一つの要求が間違ったらエラーで返します.
// 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の中のコールバック関数は成功だけです.