【发布时间】:2018-09-06 20:23:05
【问题描述】:
以下情况:
function myFunction() {
return new Promise(function (resolve, reject) {
doSomething();
let myVariable = doSomethingElse();
let otherVariable = doOtherThings(myVariable);
return resolve(otherVariable);
});
}
现在,我希望 myVariable 不是由函数调用初始化,而是在回调中,或者更确切地说,在异步函数返回的 Promise 的 .then 中。
function myFunction() {
return new Promise(function (resolve, reject) {
doSomething();
let myVariable;
asynchronousFunctionThatReturnsPromise().then(function(param) {
myVariable = doSomethingElse(param);
});
let otherVariable = doOtherThings(myVariable);
return resolve(otherVariable);
});
}
理想情况下,外部函数会等到 myVariable 被赋值,直到它执行doOtherThings(myVariable),但我想这在 javascript 中是不可能的。
不幸的是,我不能简单地将以下所有代码放在“回调”函数中,因为外部函数返回依赖于结果。
有没有办法可以处理这个问题,理想情况下无需更改外部函数 (myFunction) 上的任何内容?
【问题讨论】:
-
将依赖
myVariable的代码放入.then()回调中。这包括resolve()电话。你的myFunction()调用已经返回了一个 Promise 实例,所以任何调用它的东西都必须使用它自己的.then()回调。 -
哦,你不必
return来自resolve()的返回值。它不会伤害任何东西,但它也不会做任何有用的事情。
标签: javascript asynchronous ecmascript-6 async-await es6-promise