有这样一个结构:
function doSmth() {
resolve("aga");
};
new Promise(resolve => doSmth())
.then(result => console.log(result));
哪个不起作用。
上下文丢失是很合乎逻辑的,所以我尝试了call:
new Promise(resolve => doSmth.call(this))
还是不行。resolve()函数里面的函数是不可见的doSmth()。
所以问题是:这是真的吗?如果是这样,怎么办?
或者也许我只是在设计上做错了什么,而不是应该的?
更新:
在函数中添加this.before解决了上下文丢失的问题。现在在此函数中可见。是的......由于某种原因它没有功能。它只是未定义的。而且我不明白为什么...resolvedoSmthresolveresolve
function doSmth() {
this.resolve("aga");
};
new Promise(resolve => doSmth.call(this))
.then(result => {console.log(result)});
resolve是一个参数,而不是 Promise 本身的属性。所以上下文是无关紧要的。要关闭这个参数,需要直接在构造函数内部声明函数,反之亦然,让doSmth这个构造函数:
或者直接传递这个参数: