承诺.resolve 响应分配给外部变量



嗨,我有一个与java脚本Promise有关的问题。

var value;
Promise.resolve(await this.triggerAPI_MDBREADMI_GetFGLINHU2()).then(res => {
if (a === 1) {
RequestSearchController.runNumber = res;
} else {
RequestSearchController.runNumber = RequestSearchController.runNumber + 1;
}
value = RequestSearchController.runNumber;
});
console.log(value);

我需要将 RequestSearchController.runNumber 分配给一个外部变量 'value'。但我的结果是不确定的。有人可以帮助我确定我提出的问题吗

值已定义。

它只是在为其分配值之前被记录下来。 Promise 是异步的,这意味着控制台.log将在执行 promise 中的代码之前触发,从而导致显示其未定义的值。值是在承诺解析后定义的,您只是在它成为承诺之前记录了它。将控制台.log放在底部的 promise 回调中,您将在定义后记录它。

反抗模式

使用 async 函数时,await 关键字会暂停函数的执行,直到 await 解析后的承诺。因此,您不需要将其包装在 Promise.resolve 中或使用 .then(( 模式。

固定代码:

var value;
var res = await this.triggerAPI_MDBREADMI_GetFGLINHU2())
RequestSearchController.runNumber = (a === 1 ? res : RequestSearchController.runNumber +1);
value = RequestSearchController.runNumber;
console.log(value);

RequestSearchController是未定义的吗?如果是这样,那将是一个单独的 API 问题。

如果您得到有效的响应,只需将控制台.log放在.then内即可。你也不需要await

var value;
Promise.resolve(this.triggerAPI_MDBREADMI_GetFGLINHU2()).then(res => {
if (a === 1) {
RequestSearchController.runNumber = res;
} else {
RequestSearchController.runNumber = RequestSearchController.runNumber + 1;
}
value = RequestSearchController.runNumber;
})
// New code here v
.then( () => console.log("value", value))

在函数的 for 循环/返回值中:

var value;
myFunc = () => {
for (var i = 0; i < something; i++) {
Promise.resolve(this.triggerAPI_MDBREADMI_GetFGLINHU2()).then(res => {
if (a === 1) {
RequestSearchController.runNumber = res;
return RequestSearchController.runNumber;
} else {
RequestSearchController.runNumber = RequestSearchController.runNumber + 1;
return RequestSearchController.runNumber + 1
}
})
// New code here v
.then( res => value = res)
}
console.log(value) // value only prints once
return value
}

最新更新