核心代碼
var taskIndex = 0;
var taskFinishIndex = 0;
function addSyncTask(func, resolve, reject) {
var taskId = taskIndex;
taskIndex++;
function callback() {
if (taskId == taskFinishIndex) {
new Promise(func).then(function (data) {
resolve(data);
taskFinishIndex++;
}).catch(function (err) {
reject(err);
taskFinishIndex++;
});
} else {
setTimeout(callback, 100);
}
}
setTimeout(callback, 100);
}
使用Demo
addSyncTask(function (resolve, reject) {
console.log("task_0 start!");
setTimeout(function () {
try {
resolve();
} catch (err) {
reject(err);
}
}, 3000);
}, function (data) {
console.log("task_0 end!");
});
addSyncTask(function (resolve, reject) {
setTimeout(function () {
try {
console.log("task_1 start!");
resolve();
} catch (err) {
reject(err);
}
}, 100);
}, function (data) {
console.log("task_1 end!");
});
addSyncTask(function (resolve, reject) {
setTimeout(function () {
try {
console.log("task_2 start!");
resolve();
} catch (err) {
reject(err);
}
}, 100);
}, function (data) {
console.log("task_2 end!");
});
運行結果
task_0 start!
task_0 end!
task_1 start!
task_1 end!
task_2 start!
task_2 end!