738810
学了一天的Promise,还是不太理解Promise。 然后凭着自己的理解写下如下对比的代码,希望有人能帮我理解Promise.
假设在express里,我希望先检查请求目录的正确性(这步不是异步的),再检查文件权限,最后发送文件,并检查结果,我普通的写法如下。
server.get('/file',(req,res)=>{
let filepath=pathcheck(req.query.path,req.query.filename);
if(!filepath) res.json({message: 'invalid path'});
else fs.access(filepath,fs.R_OK,(err)=>{
if(err) res.json(err);
else res.sendFile(filepath,{},(err)=>{
if(err) res.json(err);
else console.log('success');
});
});
});
这是Promise的。
server.get('/file',(req,res)=>{
let invalidcheck=new Promise((resolve,reject)=>{
let filepath=pathcheck(req.query.path,req.query.filename);
if(!filepath) reject({message: 'invalid path'});
else resolve(filepath,fs.R_OK);
});
let accesscheck=invalidcheck.then((path,mode)=>{
return new Promise((resolve,reject)=>{
fs.access(path,mode,(err)=>{
if(err) reject(err);
else resolve(path);
});
});
});
let sendcheck=accesscheck.then((path)=>{
return new Promise((resolve,reject)=>{
res.sendFile(path,{},(err)=>{
if(err) reject(err);
else resolve('success');
});
});
});
let resultcheck=sendcheck.then(console.log).catch(res.json);
});
代码不一定正确,但这写法和大家普遍的写法一样吗?