Javascript-全局变量值未在代码块外部正确反映

Javascript-全局变量值未在代码块外部正确反映,javascript,promise,global-variables,Javascript,Promise,Global Variables,我已经将全局变量(布尔值)设置为false,然后在代码块中我将其设置为true,并导出该变量以编写单元测试 我相信我已经击中了代码,但我看到的值是假的 下面是代码片段 var bWrittenRegistry = false; function setOrUnsetRegistry(regValue){ let promise = new Promise(function(resolve, reject) { resolve((async () => { if(s

我已经将全局变量(布尔值)设置为false,然后在代码块中我将其设置为true,并导出该变量以编写单元测试

我相信我已经击中了代码,但我看到的值是假的

下面是代码片段

var bWrittenRegistry = false;

function setOrUnsetRegistry(regValue){
 let promise = new Promise(function(resolve, reject) {
    resolve((async () => {

      if(somecondition){

       regedit.putValue({
        'HKLM\\System\\CurrentControlSet': {
          'something': {
            value: regValue,
            type: 'REG_SZ'
           }
        }
      },function(err) {//callback
          console.log("called");//printed
          if (err) {
            console.log("Error22" + err);
          }else {
               bWrittenRegistry = true;
               console.log(bWrittenRegistry);// prints true
           }
       }
     );
   }

  }))();
 }

Inside test.spec.js

 it('should set or unset unset variable in registry',function(done){
        this.timeout(300000);
        somefunc.setOrUnsetRegistry(1).then(function(){
        console.log(somefunc.bWrittenRegistry);//prints false
        expect(somefunc.bWrittenRegistry).to.equal(true);//test fails
        done();
        })

  })

我相信异步正在发生,但我希望在回调后it必须打印“true”

使用
var
而不是
let
,如果您需要以这种方式确定变量的范围。Let的作用域更紧。@Gavin它被声明为全局,这不是很“紧”。-)从我看到的情况来看,您并没有在测试中模拟错误情况,而且您的代码中有一个异步但没有等待。。。您应该在满足条件后解决问题,或者在出现错误时拒绝。。。但您马上就可以解决问题了。我已经更改了代码,改为“让”我声明全局变量为“var”,但问题仍然存在,当我预期变量为true时,测试失败请使用
var
而不是
let
,如果您需要以这种方式限定该变量的范围。Let的作用域更紧。@Gavin它被声明为全局,这不是很“紧”。-)从我看到的情况来看,您并没有在测试中模拟错误情况,而且您的代码中有一个异步但没有等待。。。您应该在满足条件后解决问题,或者在出现错误时拒绝。。。但您正在立即解决..我已经更改了代码“让”我声明全局变量为“var”仍然存在问题,当我预期变量为true时,测试失败