javascript - 如何让一个函数在 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的信息,并想做一个可以做同样事情的函数。不幸的是,我在互联网上找不到任何可以回答这个问题的地方。感谢阅读这个问题!!
有些人在问我为什么真的需要这样做,即使我可以通过其他方式做到这一点。为什么只有承诺?好吧,实际上我只是想和他们一起玩,以便我可以更好地理解他们,这就是提出这个问题的原因。
解决方案
成为“承诺的忠实拥护者”是一回事,但在绝对不需要的地方使用它们只是一种糟糕的形式。
话虽如此,如果您想对一系列承诺进行操作,您可以使用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);
推荐阅读
- git - 如何使用 sourceTree 推送?
- python - 使用 python 从 Oracle 到文本文件的 Blob 数据
- python - 这个 None 列表来自哪里?
- jquery - 如何获取特定文本
- jQuery中的元素?
- c++ - CPU 如何提供 memory_order_acquire 保证?
- vue.js - 如何在 vue cli 3 生成的项目中完成删除 eslint?
- android - 如何正确使用 GSON 与 5 天预报 openweathermap 应用程序
- ruby-on-rails - 是否有种子.rb 的指南/文档?
- wordpress - 将帖子类型 slug 更改为“/”会破坏所有页面
- time - while (true) 循环的时间复杂度是多少?