登录控制台是否解决了相同的事情?

时间:2018-12-15 03:17:13

标签: javascript promise

我有一个程序,该程序可以使计算机使用异步JavaScript Promises一次模拟多个琐事。我决定从小处着手,专注于洗碗。基本上,我的代码有两个文件-一个用于返回Promise对象的新实例的库和一个app.js,该库用.then().catch()调用这些函数。

这就是library.js中的函数。

let washDishes = ({soap}) => {
 return new Promise ((resolve, reject) => {
   setTimeout(() => {
      if (soap) {
        console.log('Status: Clean Dishes'.blue)
        resolve('clean dishes');
      }
      else {
        console.log('Status: Dirty Dishes'.blue);
        reject('dirty dishes');
      }
   }, 1000)
 })
};

let addSoap = () => {
  return new Promise ((resolve) => {
    setTimeout(() => {
      console.log('Status: Soap Added'.blue)
      resolve('soap added');
    }, 1000)
  })
};

let emptyDishwasher = () => {
  return new Promise ((resolve) => {
    setTimeout(() => {
      console.log('Status: Dishwasher Emptied'.blue)
      resolve('dishes put away')
    }, 1000);
  })
}

在上面,我返回一个新的Promise,记录状态并在1秒后解析相同的文本。 同时解决resolve()和console.log()是否多余?

如果我不解决,它将无法继续进行。如果我不登录,则不会显示正在发生的事情。

这是我的app.js代码的大部分:

console.log("Doing chores...");

const cleanDishes = washDishes({soap: true})
    .then(function(resolvedValue) { 
        emptyDishwasher(resolvedValue);
    })
    .catch(function(rejectedValue) {
        addSoap(rejectedValue);
    });

在此处放置console.log()语句将导致控制台打印

Promise <pending>

我应该如何重组我的代码以停止这种冗余,同时保持我正在实践Promises的事实?

2 个答案:

答案 0 :(得分:2)

通过分解辅助函数中的重复部分,可以使代码更干燥:

{{1}}

答案 1 :(得分:-1)

从技术上讲,resolve()reject()不需要任何参数,因为它们的值是通过字符串文字输出的。因此,

resolve('soap added')

可以成为

resolve()