繁体   English   中英

执行单行代码后解决承诺

[英]Resolve Promise After Executing Single Line Of Code

我有一系列尝试对齐的事件,但是我不明白如何在单行异步代码之后解决承诺。 在这种情况下,我正在进行一个API调用,该调用解析为一个对象数组。 然后,我使用Object.assign()将对象数组转换为对象对象。 完成后,我接下来要调用一个函数,该函数对对象的新对象进行处理。 转换过程需要一些时间,我不确定如何将函数调用推迟到对象转换之后。 我的无效代码如下。

this.queryCodes().then(() => {
  new Promise((resolve) => {
    resolve(() => {
      // This code isn't executing.
      this.floorCodesLookup = Object.assign({}, ...this.floorCodes);
    });
  }).then((data) => {
    this.resolveCodesToDescriptions();
  });
});

resolve应该给你的异步操作,而不是要执行的代码的结果。 您要执行的代码不应放在resolve参数中,而应在回调中提供给promise构造函数。 因此,对于您的摘要:

this.queryCodes().then(() => {
  return new Promise((resolve) => {
    // Put the code you want to execute here...
    // Call resolve when your work is done, and pass it the result if there is one.
    resolve(/* maybe result here */);
  }).then((data) => {
    this.resolveCodesToDescriptions();
  });
});

还值得注意的是,您不需要使用promise构造函数,因为您已经链接了一个promise。 您可以:

this.queryCodes().then(() => {
  // Do additional work here...
  this.floorCodesLookup = Object.assign({}, ...this.floorCodes);
  return this.resolveCodesToDescriptions();
});

resolve()不将回调作为参数。 它以解析值作为参数。 不确定从何处获得回调概念。 这就是从不调用回调的原因,因为它不是resolve()的受支持功能。

可能不需要在.then()处理程序内手动创建promise .then()并且可能是反模式 您在这里没有显示足够的真实代码来了解正在发生的事情,但这可能比所需的复杂得多。 从您显示的代码中,我认为您可以做到这一点:

this.queryCodes().then(() => {
   this.floorCodesLookup = Object.assign({}, ...this.floorCodes);
   this.resolveCodesToDescriptions();
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM