【问题标题】:Trying to understand promise based javascript code试图理解基于 Promise 的 JavaScript 代码
【发布时间】:2018-03-05 21:54:29
【问题描述】:

我在existing open source library 中有以下承诺代码:

简化代码如下:

class SignIn extends React.Component {
  constructor(props) {
    super(props);
    // What is the underlying type of this.resolver ?
    this.resolver = Promise.resolve();
  }

  handleMFACancel() {
    // Is resolver a function ?
    this.resolver(null);
  }
  handleMFASuccess(session) {
    // Is resolver a function ?
    this.resolver(session);

  }
}

我不明白我们如何将this.resolver 用作函数。

它不应该是一个已解决的承诺,或者可能只是一个承诺。

【问题讨论】:

  • The Promise.resolve(value) method returns a Promise object developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • this.resolver() 返回一个 Promise 对象。如果要再次调用方法/函数,请分配this.resolver = Promise.resolve(不带括号)
  • 好吧,如果您只是尝试代码,您会发现它会引发类型错误,您不能将 Promise 用作函数。所以是的,代码只是坏了。
  • 请注意,他们overwrite this.resolver in line 59 带有大概是回调函数的东西。当然,所有这些,尤其是第 58 行中的 passing an async function as a new Promise executor,只是可怕的可怕代码。
  • @Bergi 我会这样做的。谢谢。

标签: javascript react-native promise


【解决方案1】:

正如你在这里看到的:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve Promise.resolve() 返回一个新的 Promise 对象

这通常用于创建统一的 API,因为返回的 Promise 将立即使用提供的值解析(在您的情况下没有值 - 但您可以使用 Promise.resolve('some-value')

您可能想要在这里做的是控制何时取消或成功应该通过实现您自己的代码来进行实际登录并将解析器承诺设置为您自己的特定逻辑,例如(伪代码):

this.resolver = http.someCallToGetSession().then(({ result, session }) => {
  if (result.val === 'ok') {
    return session;
  } else {
    throw new Error('Session not found');
  }
});

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多