案例一
var a = function(){
var array = [3,4,5]
for (var i = 0; i < array.length; i++) {
new Promise (function (resolve, reject ) {
console.log(i);
return resolve();
}).then(function (){
console.log(i);
})
}
}
输出结果
0
1
2
3
3
3
先把for循环结束完,才会调用then中的回调函数。
案例二
- 采用递归调用的形式改写for循环
/**
* 使用场景: 在T函数中, 由于T2中有异步操作,无法保证,运行完T2之后,
* 在执行打印console.log("我是后续操作...")语句,
* @constructor
*/
function T() {
new Promise(function (resolve, reject ) {
T2(resolve)
}).then(function (result ) {
console.log("ok: " + result);
console.log("我是后续操作...")
})
}
function T2(CallBack) {
var MYArry = [1,2,3,4,5,6,7,8]
new Promise(function (resolve, reject ) { // Promise 1
(function (CK) {
function loop(j) {
new Promise(function (resolve, reject) {
if (j=2) {
resolve(true)
} else {
resolve(false)
}
}).then(function (rtn) {
if (rtn) {
//返回值为true,结束循环
CK(true) //完成 Promise 1
} else {
//继续递归调用
j++;
if ( j < MYArry.length ) {
loop(j);
} else {
//没有一个符号条件的
CK(false); //完成 Promise 1
}
}
})
}
loop(0)
}) (resolve)
}).then(function (rtn) {
CallBack(rtn)
})
}
T();
输出
ok: true
我是后续操作...