Вот мой следующий кодовый блок. Я передаю свой объект val
из функции test1
в test2
и измените его значение в test2
и отправьте его обратно.Невозможно понять переменную область в функции JS
var Promise = require("bluebird");
var list = [1,2,3];
var test1 = function(test) {
return new Promise(function(resolve,reject) {
var val = {"name" : "my_name","age" : 25};
for (var item in list) {
(function (item) {
console.log("val",val);
test2(val)
.then(function(test2Response) {
console.log("test2Response",test2Response)
});
})(item)
}
});
};
var test2 = function(val1) {
return new Promise(function(resolve,reject) {
console.log("val1",val1)
val1.name = val1.name + "_1"
resolve(val1)
})
}
test1()
А вот моя ценность моих переменных val
и val1
на различных этапах.
val { name: 'my_name', age: 25 }
val1 { name: 'my_name', age: 25 }
val { name: 'my_name_1', age: 25 }
val1 { name: 'my_name_1', age: 25 }
val { name: 'my_name_1_1', age: 25 }
val1 { name: 'my_name_1_1', age: 25 }
test2Response { name: 'my_name_1_1_1', age: 25 }
test2Response { name: 'my_name_1_1_1', age: 25 }
test2Response { name: 'my_name_1_1_1', age: 25 }
Я не мог понять, почему значение Вала изменяется для каждой итерации, даже если я обновляю только val1
не val
. Как я могу поддерживать val
без изменений и изменять только «val1»?
Объекты javascript передаются по ссылке. try [underscore: 'dupe = _.clone (obj)'] (http://underscorejs.org/#clone) – Plato
Мой плохой я не знал об этом ... Работает как шарм !!!!! Спасибо man –
Ваш 'новый Promise' в' test1' вообще не работает. Вы должны использовать 'Promise.all' – Bergi