gpt4 book ai didi

javascript - 为什么返回的 Promise 上没有方法 .then 当登录到控制台时?

转载 作者:搜寻专家 更新时间:2023-11-01 00:00:24 25 4
gpt4 key购买 nike

我知道一个新的 promise 有一个 .then 方法。

但是当我在控制台记录从 getUserData('jeresig') 返回的 promise 时,我将这个对象记录到控制台(没有 .then 方法)。

Promise {
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_promise0: undefined,
_receiver0: undefined }

.then 实际上是在新的 promise 对象上,还是它只是在稍后异步添加到对象中?

那么这是否意味着 .then 被异步调用,即使它看起来是同步的?

let Promise = require('bluebird'),
GitHubApi = require('github'),

let github = new GitHubApi({
version: '3.0.0'
});

function getUserData (user){
return new Promise(function(resolve, reject){
github.user.getFollowingFromUser({
user: user,
per_page: 2
}, function(err, res){
if (err){ reject(err) }
else {
resolve(res)
}
})
})
}

console.log(getUserData('jeresig'))

// .then(function(data){
// console.log('data', data)
// })
// .catch(function(error){
// console.log('error', error)
// })

最佳答案

.then() 处理程序已经存在。这只是您在控制台中看到的问题。

它位于 console.log() 中默认不显示的对象原型(prototype)上。由于看起来您正在查看 Bluebird promise,如果您在 Chrome 的控制台中查看返回的 promise,您可以在控制台中展开对象并查看 promise 对象上的所有内容,包括原型(prototype)上的方法。 .then() 从创建 promise 的那一刻起就在那里。

您还可以通过这样做来确定它的存在:

var p = getUserData('jeresig');
console.log(p.then);

而且,.then() 最初必须存在,否则 promise 的整个概念将无法工作,因为您同步调用了 .then()。这就是您如何注册您对了解 future promise 何时得到解决的兴趣。

关于javascript - 为什么返回的 Promise 上没有方法 .then 当登录到控制台时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35980333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com