鍍金池/ 問答/HTML/ 用promise進行異步流程控制,已經(jīng)使用then控制異步了 為什么還是報沒有找

用promise進行異步流程控制,已經(jīng)使用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)
    })
回答
編輯回答
歆久

.then() 里面返回的值會經(jīng)由 Promise.resovle 處理,然后決定其行為。

所以你每次都只是創(chuàng)建了 Promise 實例,但并沒有返回給 Promise 處理,相當(dāng)于直接執(zhí)行下一個 .then(),不等待 Promise 的狀態(tài)改變。

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

關(guān)于 Promise 我之前做過一次講堂,講得非常詳細,推薦你看下:Promise 的 N 種用法。

2017年1月12日 10:27
編輯回答
敢試

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

2018年8月5日 21:24