首页 > 解决方案 > 为什么 .then(console.log) 可以工作,但常规的 console.log() 会出错?

问题描述

请参考所附图片。

这是我的第一个节点应用程序/脚本,我试图理解为什么我.then(console.log):在最后附加时得到不同的结果,而当我只使用console.log(list);.

https://imgur.com/a/1kJ7gXX

如果图像未在此处加载,则为片段

// Generate list
const list = r.getSubreddit('AskReddit')
    .getTop({ time: 'all', limit: 1 })
    .map(post => ({
        title: post.title,
        url: post.url,
        upvotes: post.ups
    }))
    .then(console.log);

// console.log(list);

我收到此错误消息:

internal/util/inspect.js:373
  const symbols = Object.getOwnPropertySymbols(value);
                         ^

TypeError: 'ownKeys' on proxy: trap result did not include 'prototype'
    at Function.getOwnPropertySymbols (<anonymous>)
    at getKeys (internal/util/inspect.js:373:26)
    at formatRaw (internal/util/inspect.js:617:12)
    at formatValue (internal/util/inspect.js:540:10)
    at inspect (internal/util/inspect.js:197:10)
    at Object.formatWithOptions (util.js:84:12)
    at Console.(anonymous function) (internal/console/constructor.js:274:15)
    at Console.log (internal/console/constructor.js:284:61)
    at Object.<anonymous> (/Users/ik/Documents/Personal/list.js:27:9)
    at Module._compile (internal/modules/cjs/loader.js:799:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:810:10)
    at Module.load (internal/modules/cjs/loader.js:666:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:606:12)
    at Function.Module._load (internal/modules/cjs/loader.js:598:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:862:12)
    at internal/main/run_main_module.js:21:11

标签: javascript

解决方案


第一次调用 'r.getSubreddit(...).getTop(...).map(..)' 正在返回一个承诺。这就是为什么你可以调用 '.then(console.log)'</p>

'.then' 表示“一旦承诺完成,或者换句话说,当来自 getSubreddit 的调用完成时执行此操作。

当您说“console.log(list)”时,您要求的值可能存在也可能不存在。您创建了 Promise,JavaScript 立即调用下一个调用,即您的 console.log,并且列表仍在等待 Promise 解决。当您使用 .then() 时,您是在说“在 console.logging 输出之前等待这个承诺解决。”</p>


推荐阅读