【问题标题】:how to make a function into Promise如何将一个函数变成 Promise
【发布时间】:2020-08-22 11:01:41
【问题描述】:

您好,我正在尝试将函数 addUserToDBs 设置为 promise,但我想知道为什么我的代码不起作用? 有人可以请教吗?谢谢

原函数:

const addUserToDBs = (username) => {

    username = username.trim().toLowerCase();
    const existingUser = userDatas.users.find(user =>user.name === username);
    if (existingUser) {
        return { error: 'Username is taken' };
    }
    let newuser = {
        name: username,
        id: uuid.v4(),
        rooms: [],
        joinDate: +new Date()
    };
    userDatas.users.push(newuser);
    save(userDatas, userDB_PATH);
    return userDatas.users;


 };

上面函数中使用的save函数也是一个promise

const fs = require("fs");
exports.save =(data, PATH) =>{
return new Promise((resolve, reject) => {
  fs.writeFile(PATH, JSON.stringify(data), function(err) {
    if (err) {
      reject(err);
    } else {
      resolve();
    }
    });
   });
  }

下面的代码不工作,不知道为什么?

 const addUserToDBs = (username) => {
return new Promise((resolve, reject)=>{
    username = username.trim().toLowerCase();
    const existingUser = userDatas.users.find(user =>user.name === username);
    if (existingUser) {
        reject({ error: 'Username is taken' }) ;
    }else{  

    let newuser = {
        name: username,
        id: uuid.v4(),
        rooms: [],
        joinDate: +new Date()
    };
        resolve(newuser)
    }

    userDatas.users.push(newuser);
    save(userDatas, userDB_PATH);
    return userDatas.users;

   })

    };

【问题讨论】:

    标签: function promise fs


    【解决方案1】:

    您在函数中间调用了 resolve,因此永远不会到达 save(userDatas) 函数。 fs.writeFile() 也是一个异步函数,您无需在返回 userDatas.users 之前等待完成。考虑转换为 async/await...

    
    const addUserToDBs = async username => {
        username = username.trim().toLowerCase();
        const existingUser = userDatas.users.find(user => user.name === username);
        if (existingUser) {
            throw new Error({ error: 'Username is taken' }) ;
        } 
        const newUser = ({
            name: username,
            id: uuid.v4(),
            rooms: [],
            joinDate: new Date()
        })
        userDatas.users.push(newUser);
        await save(userDatas, userDB_PATH)
        return newUser
    }
    
    
    addUserToDBs(userName)
        .then(newUser => {
           //do whatever you want with the new user
        })
    
    

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 2020-11-19
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多