Object.prototype.modify = function(modifications,prop){
modifications.forEach(modifier => {
this[prop] = modifier(this[prop])
})
}
function removeLastName(str){
return str.split(' ')[0]
}
function upperCase(str){
return str.toUpperCase()
}
function translate(str){
return new Promise((resolve,reject) => {
setTimeout( _ => resolve(str+"translated"),1000)
})
}
function prepareUser(user){
user.modify([removeLastName,upperCase],'name')
// user.modify([removeLastName,upperCase,trans],'name')
return user
}
var user = {
name: "simon madsen"
}
console.log(prepareUser(user));
您好,我如何使用我的修改函数来使用返回promise的普通函数和函数。没有我所有的修改函数返回promises,并且没有我的修改函数来返回一个promise。
答案 0 :(得分:1)
您可以尝试将所有同步功能转换为承诺并使用Promise.all
,请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
return Promise.all(modifications.map(item => {
if (item instanceof Promise){
return item
} else {
return new Promise(function(resolve, reject) {
try {
resolve(item(prop))
} catch (err) {
reject(err)
}
})
}
}))
// Then get the value after everything resolves
user.modify([removeLastName,upperCase,translate],'name')
.then(function(results) {
user.name = results.pop()
console.log(user)
})
.catch(function(err) {
console.log('Oops', err)
})
答案 1 :(得分:0)
Object.prototype.modify = function(modifications,prop){
var modificationsPromises = modifications.map(modifier => {
return Promise.resolve(modifier(this[prop]))
.then( modifiedProp => {
this[prop] = modifiedProp
})
})
return Promise.all(modificationsPromises).then( _ => Promise.resolve(this))
}
这是我的解决方案,感谢您的回复。