JavaScript承诺不更新变量

时间:2016-09-29 10:48:13

标签: javascript angularjs promise localforage

我在localStorage中有一个对象数组,而get有一个来自$http get调用的数组。我使用此代码替换来自localStorage

$http get数组中的部分
 var arr = res;
     minorObject.forEach(function (arr, i) {
     console.log('above if', arr);
     if (minorObject[i].id === arr.id) {
       arr[i] = minorObject[i];
       console.log('arr after:', arr);
      }
     });

这一切都在.then()中,但var arr = res;始终保持与最初设置的值相同。我无法理解arr变量是如何更新的。 console.log('arr after:', arr);具有正确的值,但是一旦退出循环,arr将恢复原状。这是函数

function loadList() {
  $localForage.getItem('minorArray').then(function (res) {
    if (res === null) {
      minorResource.getAll().then(function (res) {
        console.log('minorlist 35', res.minorWorks);
        var minorSync = res.nextSyncDateTime;
        $localForage.setItem('minorArray', res.minorWorks).then(function (arrRes) {
          console.log('arrRes', arrRes);
          minorList.minorArray = arrRes;
          // set nextSync
          $localForage.iterate(function (value, key) {
            if (key === 'nextSync') {
              return value;
            }
          }).then(function (res) {
            // update minor works sync date
            res.mwSync = minorSync;
            $localForage.setItem('nextSync', res);
          });
        })
      });
    } else {
      minorResource.getAll().then(function (res) {
        var minorObject = res.minorWorks,
          minorSync = res.nextSyncDateTime;
        if (minorObject !== null) {
          $localForage.iterate(function (value, key) {
            if (key === 'minorArray') {
              return value;
            }
          }).then(function (res) {
            console.log('response from then promise:', res);
            var arr = res;
            minorObject.forEach(function (arr, i) {
              console.log('above if', arr);
              if (minorObject[i].id === arr.id) {
                arr[i] = minorObject[i];
                console.log('match');
                console.log('arr after:', arr);
              }
            });
            // return $localForage.setItem('minorArray', arr).then(function (res) {
            //   minorList.minorArray = res;
            // });
          });  

0 个答案:

没有答案