如何理解这个承诺代码
How to understand this Promise code?
'use strict';
Promise.resolve(() => 'John')
.then((args) => {
console.log(args);
throw new Error('ops')
})
.catch((ex) => {
console.log(ex)
})
.then(() => {
throw new Error('ups')
console.log('Doe')
})
我认为console.log(args);
应该输出'John'
,但是当我运行此代码时,输出是[ [Function] ]
所以我很困惑。
Promise.resolve
将创建一个新的承诺,使用您传递给它的值进行解析。因此,在您的情况下,您的承诺实际上是通过函数对象解决的。这意味着,then
处理程序将传递函数对象本身。
你应该做的是
new Promise((resolve, reject) => resolve('John'))
.then(args => {
console.log(args);
throw new Error('ops')
})
.catch(console.log.bind(console));
现在,您正在创建一个 Promise
对象,并使用值 John
来解析该对象。
如果您希望使用值轻松解析 Promise,请不要传递函数对象,而是将实际值本身传递给函数Promise.resolve
。
Promise.resolve('John')
.then(args => {
console.log(args);
throw new Error('ops')
})
.catch(console.log.bind(console));
现在,您有一个 Promise,使用值 John
解析,then
处理程序将获得解析的值John
。
注意:当您知道实际的解决方法时,这是创建承诺的推荐方法,这样您就可以避免承诺构造函数反模式。
'use strict';
Promise.resolve('John')
.then((args) => {
console.log(args);
throw new Error('ops')
})
.catch((ex) => {
console.log(ex)
})
.then(() => {
throw new Error('ups')
console.log('Doe')
})
我修改Promise.resolve('John')
,它有效。请参阅承诺.解析。
resolve 用于将参数直接传递给 then-handler
如果你想要'John',你需要在调用resolve((时调用匿名函数
Promise.resolve(function(){return 'John';}());
请注意}()
函数调用。
相关文章:
- 干净的代码和嵌套的承诺
- 组织承诺代码
- 用Javascript承诺包装同步代码有什么好处吗
- Javascript承诺:它们能在用户空间代码中完全实现吗
- 使我的异步代码与setTimeout同步.我需要承诺吗
- 当承诺链编码错误时,代码会起作用
- 此代码中嵌套承诺的目的是什么
- 使用 co 和来自同步代码的承诺(mongoDB 示例)
- 解析云代码:如何调用异步保存的承诺
- Javascript Jquery在外部样式表更改/重新加载承诺方式后执行代码
- 使用承诺编写可读代码的最佳方法是什么?
- 清理带有承诺的意大利面条代码
- 如何使用Angular检索HTTP状态代码;s$q承诺
- 如何理解这个承诺代码
- 解析云代码-承诺问题
- 解析云代码-承诺
- 使用Jquery解决所有承诺后执行代码
- 这个承诺函数的代码出了什么问题
- 将异步代码转换为承诺代码
- 将承诺代码从Q转换为蓝鸟