Javascript 迭代正常函数和承诺
您好,我如何让我的modify函数使用普通函数和返回承诺的函数。不让所有修改函数返回承诺,也不让修改函数返回承诺。您可以尝试将所有同步函数转换为承诺并使用Javascript 迭代正常函数和承诺,javascript,es6-promise,Javascript,Es6 Promise,您好,我如何让我的modify函数使用普通函数和返回承诺的函数。不让所有修改函数返回承诺,也不让修改函数返回承诺。您可以尝试将所有同步函数转换为承诺并使用承诺。所有,请参阅 这是我的解决方案,谢谢你的回复 “没有我的修改函数来返回承诺。”这是不可能的。一旦一个函数返回一个承诺,调用它的函数也必须返回一个承诺(或接受回调)。如何避免将所有纯函数都写入承诺,我是否需要因为一个异步函数而将所有内容都封装在承诺中。不,调用方可以执行promise.resolve(f())。如果f返回一个承诺,它将简单地
承诺。所有,请参阅
这是我的解决方案,谢谢你的回复 “没有我的修改函数来返回承诺。”这是不可能的。一旦一个函数返回一个承诺,调用它的函数也必须返回一个承诺(或接受回调)。如何避免将所有纯函数都写入承诺,我是否需要因为一个异步函数而将所有内容都封装在承诺中。不,调用方可以执行promise.resolve(f())
。如果f
返回一个承诺,它将简单地返回该承诺。如果f
返回任何其他值,将返回解析为该值的承诺。谢谢您的建议。
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));
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)
})
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))
}