如何在避免反模式的同时使用承诺层次结构?

时间:2019-01-14 11:40:21

标签: javascript ecmascript-6 es6-promise

我试图学习如何避免此处What is the explicit promise construction antipattern and how do I avoid it?

中所述的反模式

我从JSFiddle上的一些代码开始,但是没有输出我期望的结果。

function sum1(x){
    return new Promise(resolve => x+1)
}

function sum2(x){
  return sum1(x)
  .then(x => x+1);
}

function sum3(x){
  return sum2(x)
  .then(x => x+1)
}

sum3(1)
.then(console.log);

我希望它能打印4,但什么都不打印

2 个答案:

答案 0 :(得分:2)

您需要使用Promise.resolve()创建已解决的承诺:

function sum1(x){
    return Promise.resolve(x+1)
}

function sum2(x){
  return sum1(x)
  .then(x => x+1);
}

function sum3(x){
  return sum2(x)
  .then(x => x+1)
}

sum3(1)
.then(console.log);

答案 1 :(得分:1)

您在sum1中做错了。 new Promise((resolve, reject) => {//code here})以函数为参数

function sum1(x){
    return new Promise((resolve) => {
    	resolve(x + 1);
    })
}

function sum2(x){
  return sum1(x)
  .then(x => x+1);
}

function sum3(x){
  return sum2(x)
  .then(x => x+1)
}

sum3(1)
.then(res => console.log(res));