Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代正常函数和承诺_Javascript_Es6 Promise - Fatal编程技术网

Javascript 迭代正常函数和承诺

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

您好,我如何让我的modify函数使用普通函数和返回承诺的函数。不让所有修改函数返回承诺,也不让修改函数返回承诺。

您可以尝试将所有同步函数转换为承诺并使用
承诺。所有
,请参阅


这是我的解决方案,谢谢你的回复

“没有我的修改函数来返回承诺。”这是不可能的。一旦一个函数返回一个承诺,调用它的函数也必须返回一个承诺(或接受回调)。如何避免将所有纯函数都写入承诺,我是否需要因为一个异步函数而将所有内容都封装在承诺中。不,调用方可以执行
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))

}