我想要在目錄中獲取文件,打開它們,處理它們並寫入結果。 我想要做的所有步驟異步與承諾如何在沒有承諾的情況下運行異步承諾?
第一件事情來到我的頭是
read_dir('/tmp')
.then(function(files){
for(var i=0; i<files.length; i++){
read_file(files[i])
.then(function(file_data){
var processed_data = process_work_convert(file_data.data);
return {'filename': file_data.name, 'data': processed_data}
})
.then(function(file_data){
return write_file(file_data.filename, file_data.data);
})
.then(function(){
console.log('success');
})
}
})
但它看起來像標準的回調方式(回調地獄)
我可以用Promise.all
但它將使我的代碼同步
我想一些神奇的then_each
和catch_each
示例:
read_dir('/tmp')
.then_each(function(file){
return read_file(file);
})
.then_each(function(file_data){
var processed_data = process_work_convert(file_data.data);
return {'filename': file_data.name, 'data': processed_data}
})
.then_each(function(file_data){
return write_file(file_data.filename, file_data.data);
})
.then_each(function(){
console.log('success');
})
.catch_each(function(){
console.log('error');
});
此功能是否存在?
或者您可能知道如何延長Promise來實現這個目標嗎?
或者可能有其他方法可以做到這一點?
您的目標是生成文件夾資源管理器嗎?你有沒有考慮過使用遞歸方法?有關承諾的更多文檔,您還可以查看Mozilla文檔:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise – Cr3aHal0
不,不是文件夾瀏覽器。我想從文件夾中獲取所有日誌文件並將其轉換爲其他格式。 –
「*我可以使用Promise.all,但它會使我的代碼同步*」 - 等什麼?編號 – Bergi