我试图理解为什么这些console.log
语句的行为不同。我希望他们的行为是一样的:
使用 Node 7。考虑以下情况:
1.Promise.resolve(对象)
Promise.resolve
按照我的预期处理对象:
Promise.resolve({ a: `hello` }).then(console.log) // { a:'hello' }
2. 直接console.log
来自库的类实例。
如果我存储一个 Osmosis 实例,我可以 console.log 它:
const osmosis = require(`osmosis`)
console.log(new osmosis.get(url))
/* { prev:
{ instance: Osmosis:1,
name: 'get',
args: [ 'http://www.google.com', , ],
getURL: [Function: getURLArg],
url: 'http://www.google.com',
params: undefined,
cb: [Function: Get],
next: [Circular] } }
*/
3. Promise.resolve(类实例)
但如果我尝试解决渗透实例,我看不到奇偶校验:
Promise.resolve(new osmosis.get(url)).then(console.log) // nothing
这里发生了什么?我是否误解了什么Promise.resolve()
...? Or console.log
?
鉴于 [1] 中的行为,为什么 [3] 的日志与 [2] 不同?
Context:我认为我当前的实际目标对于回答这个问题并不重要。但以防万一,你还是走吧。我不明白库本身的任何内容应该如何影响最终示例的输出。这是有关该内容的文档new osmosis.get()
尽管:http://rchipka.github.io/node-osmosis/Osmosis.html#toc1__anchor http://rchipka.github.io/node-osmosis/Osmosis.html#toc1__anchor
new osmosis.get(url)
不执行异步 http 请求。它实例化了一个抓取器的实例,该实例可以使用一组声明性指令来构建,并被告知在稍后的任意时间“运行”。
出于几个原因,我希望能够在承诺链中构建这组指令。
主要的一点是,它将是将指令定义分解为更容易测试和理解的不同函数的最简单方法。例如代替osmosis.get(url).set({some stuff}).find(@something)
, 我想:
function defineSearch(instance){
return instance.set({some stuff})
}
function definePath(instance) {
return instance.find(@something)
}
Promise.resolve(new osmosis.get(url))
.then(defineSearch)
.then(definePath)
.then(instance => instance.run())