用promise进行异步流程控制,已经使用then控制异步了 为什么还是报没有找到文件的错误?

(node:2420) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: ENOENT: no such file or directory, open 'C:UsersxyhDesktopnodejstestreadbc.txt'


const fs = require('fs');
new Promise(function(resolve, reject) {
    fs.mkdir('./read', (err) => {
        if (err) {
            reject(err);
        } else {
            resolve();
        }
    })
}).then(function() {
        new Promise(function(resolve, reject) {
                fs.writeFile('./read/c.txt', 'hello', (err) => {
                    if (err) {
                        reject(err);
                    } else {
                        resolve();
                    }
                })
        })
    }).then(function() {
        new Promise(function(resolve,reject){
            fs.mkdir('./read/b',(err)=>{
                if(err){
                    reject(err);
                }else{
                    resolve();
                }
            })
        })
    }).then(function(){
        new Promise(function(resolve,reject){
            fs.writeFile('./read/b/c.txt','node',(err)=>{
                if(err){
                    reject(err);
                }else{
                    resolve();
                }
            })
        })
    }).then(function(){
        new Promise(function(resolve,reject){
            fs.readdir('./read',(err,files)=>{
                if(err){
                    reject(err);
                }else{
                    resolve(files);
                }
            })
        })
    }).then(function(result){
        console.log(result)
    })
阅读 2.4k
2 个回答

.then() 里面返回的值会经由 Promise.resovle 处理,然后决定其行为。

所以你每次都只是创建了 Promise 实例,但并没有返回给 Promise 处理,相当于直接执行下一个 .then(),不等待 Promise 的状态改变。

所以你需要在 .then() 里面改成:return new Promise(....) 这样。

关于 Promise 我之前做过一次讲堂,讲得非常详细,推荐你看下:Promise 的 N 种用法

在then里面需要把new的Promise return一下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题