首页 > 解决方案 > 如何让一个函数在 JavaScript 中返回一个 Promise?

问题描述

我正在尝试创建一个函数,该函数将获取一组对象并从中形成一个表。但我希望它像那些我们可以拥有的承诺一样,promise().then().catch()基本上我只想要我的函数中的.then()and.catch()功能。我试过这样做:

function makeTable(tableContent) {
    tableContent.forEach((cell) => {
      let type = cell.type
      return new Promise(function(resolve, reject){
        if (type === "th" || type === "tr") {
          resolve("works")
        } else {
          reject(`Cell type must be either "th" or "tr" you passed "${type}"`)
        }
      })
    })
}

let table = [
    {
      type: "pf",
    },
]
makeTable(table).then(()=>console.log("Success!")).catch(err=>console.log(err))

但显然这行不通。我想获得这个功能,因为我只是想了解更多关于 Promise的信息,并想做一个可以做同样事情的函数。不幸的是,我在互联网上找不到任何可以回答这个问题的地方。感谢阅读这个问题!!

有些人在问我为什么真的需要这样做,即使我可以通过其他方式做到这一点。为什么只有承诺?好吧,实际上我只是想和他们一起玩,以便我可以更好地理解他们,这就是提出这个问题的原因。

标签: javascriptpromise

解决方案


成为“承诺的忠实拥护者”是一回事,但在绝对不需要的地方使用它们只是一种糟糕的形式。

话虽如此,如果您想对一系列承诺进行操作,您可以使用Promise.all()

function makeRow(row) {
  return Promise.all(row.map(({type}) => new Promise((resolve, reject) => {
    if (type === 'th' || type === 'td') {
        resolve('Works');
      } else {
        reject(`Cell type must be either "th" or "td" you passed "${type}"`)
      }
  })));
}

const row = [{
  type: 'th'
}, {
  type: "pf"
}];

makeRow(row)
  .then(() => console.log("Success!"))
  .catch(console.dir);


推荐阅读