为什么在另一个内部调用函数称为"副作用"?

时间:2017-05-23 19:09:42

标签: javascript promise

最近,我阅读了post关于使用Promise的最佳做法。文章将其称为副作用"当我们调用.then()内的函数而不实际返回结果时。

somePromise().then(function () {
  someOtherPromise();
}).then(function () {
  // Gee, I hope someOtherPromise() has resolved!
  // Spoiler alert: it hasn't.
});

一般来说,我理解为什么使用return关键字除了调用该函数之外,这是一个很好的做法。但我仍然很好奇为什么我们使用短语"副作用"这里。

1 个答案:

答案 0 :(得分:1)

可能是副作用,因为您实际上并未意识到promise的执行可以生成的结果。但它并不总是副作用。

如果函数调用(在这种情况下为someOtherPromise始终执行您希望它执行的方式,那么它不是副作用。但是,由于承诺可能会失败,您可能不知道它是否确实(因为您没有处理结果),那么可能>。

通过副作用,人们可以理解次要的效果是预期的效果。如果您在不关心结果的情况下致电您的承诺,行为与您的预期不同,则会产生副作用。

因此,为了缓解可能的副作用,您可以:

  1. 退还承诺或
  2. 在then / catch块中处理它(可以导致瀑布代码,但有时候是最好的选择)。
  3. 如下图所示:

    //1.
    somePromise().then(function () {
        return someOtherPromise();
    }).then(function () {});
    //2.
    somePromise().then(function () {
        someOtherPromise().then(...).catch(...);
    }).then(function () {});