Javascript:如何确定是否承诺一个函数?

时间:2017-08-14 22:33:08

标签: javascript asynchronous promise

考虑小辅助函数,其中一些是async / promise的明显候选者(我认为我理解它们):

exports.function processFile(file){
  return new Promise(resolve => {
    // super long processing of file
    resolve(file);
  });
}

虽然这个:

exports.function addOne(number){
  return new Promise(resolve => {
    resolve(number + 1);
  });
}

似乎过度杀伤。

决定他们是否应该承诺履行其职能的规则是什么?

2 个答案:

答案 0 :(得分:1)

如果我需要按特定顺序执行多个异步函数,我通常会使用一个promise。例如,如果我需要发出三个请求并等待它们全部返回,然后才能组合数据并处理它们,那么这是一个很好的承诺用例。在你的情况下,让我们说你有一个文件,你需要等到服务中的文件和元数据都被加载,你可以把它们放在一个承诺中。

如果您正在寻求优化长时间运行流程的运营,我会更多地关注网络工作者而不是使用承诺。它们在UI线程之外运行,并使用消息将其进度传递回UI线程。这是基于事件的,但不需要承诺。唯一需要注意的是,您无法对Web worker中的DOM执行操作。

有关此处网络工作者的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

答案 1 :(得分:1)

  

决定他们是否应该承诺履行其职能的规则是什么?

实际上非常简单:

  • 当函数执行异步操作时,它应返回结果的承诺
  • 当该函数仅执行同步事务时,它不应返回承诺