试图理解普通 JS 中的承诺行为
Trying to understand promises behaviour in vanilla JS
我正在尝试编写一个脚本来检查无效的 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);
出于我不明白的原因,控制台 returns 我三行(两行用于我脚本中的 console.log,另一行有错误)。这是:
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "fulfilled"}
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
Uncaught (in promise) TypeError: Illegal invocation
我想了解的是为什么第一种情况的输出与第二种情况的输出不同,以及为什么会抛出错误。我想我调用 promise 就好了。谢谢!
这个Illegal invocation
其实和promise一点关系都没有。在浏览器中,.log()
在传递时必须绑定到 console
,所以你需要这样的东西:
parsePromised('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}')
.then(console.log<strong>.bind(console)</strong>);
另外一个问题,我无法重现,只能看到多出一行。参见 https://jsfiddle.net/sbonrcxm/
我正在尝试编写一个脚本来检查无效的 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);
出于我不明白的原因,控制台 returns 我三行(两行用于我脚本中的 console.log,另一行有错误)。这是:
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "fulfilled"}
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
Uncaught (in promise) TypeError: Illegal invocation
我想了解的是为什么第一种情况的输出与第二种情况的输出不同,以及为什么会抛出错误。我想我调用 promise 就好了。谢谢!
这个Illegal invocation
其实和promise一点关系都没有。在浏览器中,.log()
在传递时必须绑定到 console
,所以你需要这样的东西:
parsePromised('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}')
.then(console.log<strong>.bind(console)</strong>);
另外一个问题,我无法重现,只能看到多出一行。参见 https://jsfiddle.net/sbonrcxm/