Почему Promis работает только в последней переменной? - PullRequest
1 голос
/ 14 февраля 2020

Почему "тогда" в var test1 не показывать 1111111? Но если просто использовать resol (); отлично работает Что не так? Как сделать несколько запросов на обещание одновременно?

window.testFunc = function() {

  let _self = this;

  this.test = function() {
    _self.resolve();
  };

  return new Promise(function(resolve, reject) {

    _self.resolve = resolve;
    _self.reject = reject;

    //this work fine
    //resolve();

    //this not work
    setTimeout(function() {
      _self.test();
    }, 300);
  });

};


let test1 = window.testFunc();
let test2 = window.testFunc();

test1.then(function(value) {
  console.log(111111);
});
test2.then(function(value) {
  console.log(222222);
});

1 Ответ

1 голос
/ 14 февраля 2020

this имеет одно и то же значение при каждом вызове window.testFunc, поэтому _self.test - это одно и то же свойство (которое каждый раз перезаписывается).

Использование локальной переменной с новым объектом (let _self = {};) вместо общего объекта.

window.testFunc = function() {

    let _self = {};

    _self.test = function () {
        _self.resolve();
    };

    return new Promise(function (resolve, reject) {

        _self.resolve = resolve;
        _self.reject = reject;

        //this work fine
        //resolve();

        //this not work
        setTimeout(function(){
            _self.test();
        }, 300);
    });

};


let test1 = window.testFunc();
let test2 = window.testFunc();

test1.then(function(value){
    console.log(111111);
});
test2.then(function(value){
    console.log(222222);
});
...