为什么 promis 只适用于最后一个变量?
Why promis only works in the last variable?
为什么 "then" 在 var test1 中不显示 1111111?但是如果只是使用 resolve();工作正常。怎么了?如何同时做多个promise请求?
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);
});
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);
});
为什么 "then" 在 var test1 中不显示 1111111?但是如果只是使用 resolve();工作正常。怎么了?如何同时做多个promise请求?
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);
});
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);
});