【问题标题】:Need a function that find positive numbers in the array and return it需要一个在数组中找到正数并返回它的函数
【发布时间】:2021-04-14 21:03:36
【问题描述】:

这里需要做什么 实现一个 addWithDelay() 函数,它将根据以下条件使用参数:

  • 如果所有参数都是正数,它应该在 1000ms 时间范围内返回一个 Promise 包含 作为参数提供的所有数字的总和。
  • 如果任何参数由负数表示,函数应返回错误消息: “错误!某些参数是负数!”使用“reject()”选项。 这是我的代码
function addWithDelay(
    param1 = 633,
    param2 = 345,
    param3 = 986,
    param4 = 234,
    param5 = 532,
    ){
        values = [param1, param2, param3, param4, param5];
        var result = values.filter(function(number) {
            return number < 0;
          });
        if (number > 0){ 
            return Promise.resolve((param1+param2+param3+param4+param5),1000)
            }   else {
                return Promise.reject('Error! Some parameter is a negative number!')
            }
    }
    console.log(addWithDelay())

由于某种原因,它总是返回错误消息

【问题讨论】:

  • 看看How to make a promise from setTimeoutPromise.resolve 不是合适的工具。
  • 您正在尝试访问超出其范围的number。相反,请尝试使用if (result.length) {
  • 看起来更好)但是没有用

标签: javascript


【解决方案1】:
  1. 您可以使用 some 而不是 filter 在数组中查找负数。
  2. 您可以在返回的承诺中使用 setTimeout。
  3. 使用 reduce 对数组值求和。

我已经附加了一个带有更改的 sn-p。

function addWithDelay(
    param1 = 633,
    param2 = 345,
    param3 = 986,
    param4 = 234,
    param5 = 532,
    )
 {
     const values = [param1, param2, param3, param4, param5];
     const isNegativeExist = values.some(x => x < 0);
     if (!isNegativeExist) { 
       const sum = values.reduce((a, b) => a + b, 0);
       return new Promise((resolve) => setTimeout(() => resolve(sum), 1000));
     }
     else {
         return Promise.reject('Error! Some parameter is a negative number!')
     }
 }
    
addWithDelay().then(res => console.log(res));

【讨论】:

  • 这适用于负值,但它没有返回正值的总和
  • 哦,我错过了 sum 部分,现在修复它,请再检查一次(:
  • function addWithDelay( param1 = 633, param2 = 345, param3 = 986, param4 = 234, param5 = 532, ) { values = [param1, param2, param3, param4, param5]; const isNegativeExist = values.some(x =&gt; x &lt; 0); if (!isNegativeExist) { return Promise.resolve((param1+param2+param3+param4+param5),1000) } else { return Promise.reject('Error! Some parameter is a negative number!') } } console.log(addWithDelay())
  • 如果您支持答案,我将不胜感激(:
  • 当然!)刚刚发现)
【解决方案2】:

您正试图在其范围之外访问number。相反,请尝试检查result.length。另外,我已经修复了你的承诺。你不需要Promise.resolve;您只需要使用Promise 函数参数中的resolve。 cmets 中提供的 Felix 链接非常有用,MDN's documentation 也是如此。

function addWithDelay(
  param1 = 633,
  param2 = 345,
  param3 = -986,
  param4 = 234,
  param5 = 532,
) {
  return new Promise(function(resolve, reject) {
    setTimeout(() => {
      values = [param1, param2, param3, param4, param5];
      var result = values.filter(function(number) {
        return number < 0;
      });
      if (!result.length) {
        resolve(param1 + param2 + param3 + param4 + param5)
      } else {
        reject('Error! Some parameter is a negative number!')
      }
    }, 1000);
  });
}
(async () => console.log(await addWithDelay()))()

【讨论】:

    【解决方案3】:

    您在第 12 行检查 number 而不是 result.length 以推断是否存在负数,并且有必要实现 setTimeout() 函数以返回您期望的正确值。函数调用之后应该有一个then语句来打印结果。

    试试这个

    function addWithDelay(
        param1 = 633,
        param2 = 345,
        param3 = 986,
        param4 = 234,
        param5 = 532,
    ) {
        values = [param1, param2, param3, param4, param5];
        var result = values.filter(function (number) {
            return number < 0;
        });
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                if (result.length === 0) {
                    resolve(values.reduce((i, j) => i+j))
                }
                else {
                    reject('Error! Some parameter is a negative number!')
                }
            }, 1000);
        });
    }
    addWithDelay()
        .then(d => console.log(d))
        .catch(e => console.error(e));
    

    【讨论】:

      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多