试图理解香草JS中的承诺行为

时间:2016-04-27 09:40:33

标签: javascript es6-promise

我正在尝试编写一个脚本来检查无效的JSON字符串,然后抛出一个错误,我可以在控制台中登录。我正在使用promises(为了更好地理解它们是如何工作的)。

function parsePromised(value) {
  var promise = new Promise(
    function(fulfilled, rejected) {
      try {
        JSON.parse(value)
      } catch (e) {
        rejected(e)
      }
      fulfilled('fulfilled')
    }
  )
  console.log(promise)
  return promise;
}

parsePromised('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}').then(console.log);

由于我不理解的原因,控制台返回三行(我的脚本中有两行用于console.log,另一行有错误)。这是:

Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "fulfilled"}

Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}

Uncaught (in promise) TypeError: Illegal invocation

我想要了解的是为什么第一种情况下的输出与第二种情况下的输出不同以及为什么会抛出错误。我想我援引诺言就好了。谢谢!

1 个答案:

答案 0 :(得分:0)

.log()实际上与承诺无关。在浏览器中,传递时console必须绑定到parsePromised('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}') .then(console.log.bind(console));,因此您需要这样的内容:

{{1}}

至于另一个问题,我无法复制,我只能看到一条额外的线。见https://jsfiddle.net/sbonrcxm/