蓝鸟承诺在快递路线解决
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝鸟承诺在快递路线解决相关的知识,希望对你有一定的参考价值。
我有一个简单的REST应用程序,我想读取目录中的文件并将它们发送回前端。我正在使用的代码:
const fs = Promise.promisifyAll(require('fs'))
const router = require('express').Router()
router.get('/list', async (req, res, next) => {
const files = await fs.readdirAsync('presentations')
res.json(files)
})
问题是:我的前端接收'Promise',但是如果我尝试调试它会告诉我files
是一个数组。我试过不要像这样使用async / await语法:
router.get('/list', (req, res, next) => {
fs.readdirAsync('presentations')
.then(files => {
res.json(files)
})
})
但结果是一样的:前端仍然得到Promise
。
UPD:问题在于前端axios
实例。它没有解决承诺,所以await
的结果解决了一个问题。
答案
所以,有三个部分。阅读,存储和发送。
这是阅读部分:
var fs = require('fs');
function readFiles(dirname, onFileContent, onError) {
fs.readdir(dirname, function(err, filenames) {
if (err) {
onError(err);
return;
}
onFileContent(filename);
});
});
});
}
这是存储部分:
var data = {};
readFiles('dirname/', function(filename) {
data[filename] = filname;
}, function(err) {
throw err;
});
发送部分取决于您。您可能希望逐个发送或在完成阅读后发送它们。
如果要在读取完成后发送文件,则应使用fs函数的同步版本或使用promises。异步回调不是一个好的风格。
以上是关于蓝鸟承诺在快递路线解决的主要内容,如果未能解决你的问题,请参考以下文章