如何将参数绑定到.then诺言?

时间:2018-11-04 21:17:56

标签: typescript promise

当我打电话给我的诺言时,我想对当时的函数属性进行一些修改。

这是一个代码示例,我们将假设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值。设置它们后,它可能会改变。

2 个答案:

答案 0 :(得分:2)

使用IIFE向其传递ab的值:

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()