如果我在Chrome版本56.0.2924.87(64位)上尝试此操作 - 预期结果..
Promise.reject(null).then(console.log);
> Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: null}
然而,如果我尝试使用Node v7.8.0 - 潜在错误?
Promise.reject(null).then(console.log);
> Promise { <pending> }
我做错了什么或者这是一个错误? (我假设前者)
我很难通过手柄链嘲笑被拒绝的承诺,因为拒绝并没有通过链条:(
查看MDN文档我认为我的语法正确:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
答案 0 :(得分:1)
两个输出都很好。在两个控制台中记录def test(expression, tags):
required_tags = []
optional_tags = []
def parse_and(tokens):
args = tokens[0][0::2]
extend_list = filter(lambda x: isinstance(x, str) and x not in tags, args)
required_tags.extend(extend_list)
def parse_or(tokens):
args = tokens[0][0::2]
append_list = filter(lambda x: isinstance(x, str) and x not in tags, args)
if append_list == args:
optional_tags.append(tuple(append_list))
identifier = Word(alphanums + "_" + "-" + "'")
expr = infixNotation(identifier, [
("AND", 2, opAssoc.LEFT, parse_and),
("OR", 2, opAssoc.LEFT, parse_or),
])
expr.parseString(expression)
return required_tags, optional_tags
时,您应该获得Promise {<rejected>: null}
之类的内容
但是当你将Promise.reject(null)
链接到它时呢?
.then(console.log)
,而拒绝处理程序会返回在原件被拒绝时被拒绝的承诺&#34;并立即执行此操作 - 它已经知道结果将是一个被拒绝的承诺 Promises/A+ standard允许这两种实现,第一种可能更有效,而第二种更接近EcmaScript规范中描述的行为。
在实践中,你不会注意到差异。
答案 1 :(得分:0)
由于您拒绝承诺,您需要将错误处理函数定义为第二个arg:
Promise.reject(null).then(console.log, console.error);
或使用.catch()
:
Promise.reject(null).catch(console.error);