1 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
const fs = require('fs')
const files = ['./file/1.js', './file/2.js', './file/3.js']
function series(tasks, callback) {
// 1.參數(shù)有 callback 的話就取 callback 沒有就賦值一個空函數(shù)
callback = callback || function() {}
let results = Array.isArray(tasks) ? [] : {}
eachOfSeries(tasks, function(task, key, callback) {
task(function(err, data) {
results[key] = data
// 調(diào)用eachOfSeries里面的 callback 把 err 作為參數(shù)
callback(err)
})
}, function(err) {
// 調(diào)用1的上面callback 把 err,results 作為參數(shù)
callback(err, results)
})
}
series([function(callback) {
fs.access('./file/1.js', function(err) {
// 數(shù)組第一個函數(shù)的參數(shù) callback
callback(null, err ? false : true)
});
}, function(callback) {
fs.readFile('./file/2.js', function(err, data) {
// 數(shù)組第二個函數(shù)的參數(shù) callback
callback(err, data)
});
}], function(err, results) {
if (err) {
throw err;
}
console.log(results);
});
function eachOfSeries(arr, fn, callback) {
// 2.參數(shù)有 callback 的話就取 callback 沒有就賦值一個空函數(shù)
callback = callback || function() {}
arr = arr || []
let i = -1
let sync = true
next()
function next() {
sync = true
if (++i == arr.length) {
return callback()
}
fn(arr[i], i, once(done))
sync = false
}
function done(err) {
if (err) {
// 返回 第二個 callback
return callback(err)
}
if (sync) {
setImmediate(next)
} else {
next()
}
}
function once(fn) {
return function() {
if (!fn) {
return
}
fn.apply(this, arguments)
fn = null
}
}
}
添加回答
舉報