Javascript Promise.resolve响应分配给外部变量

Javascript Promise.resolve响应分配给外部变量,javascript,Javascript,嗨,我有一个关于java脚本承诺的问题 var value; Promise.resolve(await this.triggerAPI_MDBREADMI_GetFGLINHU2()).then(res => { if (a === 1) { RequestSearchController.runNumber = res; } else { RequestSearchController.runNumber = RequestSearchController.ru

嗨,我有一个关于java脚本承诺的问题

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”。但是我的结果还没有定义。有人能帮我确定我提出的问题吗?

价值定义

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

反模式

当您使用异步函数时,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问题

如果您得到的是有效的响应,只需将console.log放在.then中即可。你也不需要等待

在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
}

offtopic,为什么在调用triggerAPI\u MDBREADMI\u GetFGLINHU2之前不检查a==1?对,所以值未定义的原因是,实际上,值已定义。它只是在赋值之前被记录下来的。承诺是异步的,这意味着在执行承诺中的代码之前将触发console.log,从而显示其未定义的值。值是在承诺解析之后定义的,您只是在它成为承诺之前记录它。将console.log放在底部的promise回调中,定义后将记录它。如果这是在for循环中运行的,那么该值仍会打印几次?正确,不知道它正在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
}