当我打电话给我的诺言时,我想对当时的函数属性进行一些修改。
这是一个代码示例,我们将假设getPromise返回一个数字作为结果:
let a = 0;
let b = 0;
getPromise().then((result) => {
console.log(a + b + result); // i want 'a' and 'b' to be equal to 0 here and not 1
});
a++;
b++;
我尝试了多种方式使用.bind()函数,但没有任何效果。
当然,专注于我面临的技术问题是对更大问题的解决。
编辑: 我没有控制a和b值。设置它们后,它可能会改变。
答案 0 :(得分:2)
使用IIFE向其传递a
和b
的值:
let a = 0;
let b = 0;
getPromesse().then(((a, b) => (result) => {
console.log(a + b + result);
})(a, b));
a++;
b++;
// mock getPromesse
function getPromesse() {
return new Promise(resolve => {
setTimeout(() => resolve(5), 500);
});
}
答案 1 :(得分:1)
.bind
是在此处使用的正确工具。
const wait = (value, delay = 100) =>
new Promise(resolve => setTimeout(() => resolve(value), delay));
let a = 0;
let b = 0;
wait(50).then(
((a, b, result) => {
console.log(a, b, result);
}).bind(null, a, b),
);
a++;
b++;
输出
0 0 50
正如预期的那样,a
捕获了b
和.bind()
。