【问题标题】:Save variable to global var during function call在函数调用期间将变量保存到全局变量
【发布时间】:2017-02-06 12:36:15
【问题描述】:

我有以下函数来解析数组并只返回特定项目:

function fetchLogs(logs) {
    var arr = logs.value;
    var res = arr.reduce((a, b) => {
        if (b.level === 'INFO') {
            a.push(b.message.split(" ").pop().replace(/"/g, ""))
        }
        return a;
    }, []);
    console.log("function", res);
    return res; // Is this return right?
}

该函数的用途是获取浏览器返回的日志(浏览器A和浏览器B),并检查日志是否匹配。

所以我的测试看起来像这样

it('should return logs from browser B', function(done) {
    browserB
      .log('browser')
      .then(function(logs) {
        fetchLogs(logs);
        done();
      })
    .catch(function(e) {
      done(e);
    })
});

最后我想比较这些数组

it('should compare browser logs', function() {
    expect(logsA).to.have.all.members(logsB);
});

这里有问题:

当我调用 fetchLogs(logs) 时,如何将函数中的变量 res 保存到我之前声明的全局变量 logsB 中功能?我需要在这里回调或承诺吗?

函数是否也正确地完成了返回?

【问题讨论】:

  • 如果你使用var fetchResult = fetchLogs();,那么你将把日志放在一个你可以做任何事情的var中。 (例如设置一个全局变量,或将其用作触发测试的函数的参数。因此,如果这实际上是您要执行的操作,则返回是正确的。查看代码,您可能需要两个变量 logsA 和 logsB与函数在同一范围内,因此这些函数可以看到 logsA 和 logsB。
  • @Shilly 就像一个魅力,我不知道为什么我没有想到这一点:)

标签: javascript arrays function callback


【解决方案1】:

对我有用的简单解决方案:

var fetchResult = fetchLogs();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多