javascript - 为什么客户端没有收到服务器检索的数据?
问题描述
我以前从未做过这种事情,我有点跳入深渊,但我觉得我真的很接近。我正在尝试将动态填充的选择列表添加到节点红色节点的编辑对话框中。我在客户端编写了一个方法,该方法调用了我在服务器中编写的方法。调用执行。服务器检索数据(通过调试打印到控制台确认),但客户端接收到的不是数据。我以前没有太多的javascript,但根据我对promises的理解,数据似乎应该发送给客户端,所以我不明白我错过了什么。
server.js 中的服务器方法:
getCircles() {
var node = this;
return node.updateSession(function (session) {
return life360.circles(session)
.then(circles => {
console.log("this gets called after the end of the main stack. the value received and returned is: " + JSON.stringify(circles));
return circles;
})
});
}
服务器“需要”../index.js,它具有:
/**
* Fetch the user's circles
*/
module.exports.circles = function (session) {
if (!session) throw new Error("session not specified");
return new Promise((resolve, reject) => {
const LIFE360_CIRCLES_URL = "https://api.life360.com/v3/circles"
const options = {
url: LIFE360_CIRCLES_URL,
headers: {
'Authorization': `${session.token_type} ${session.access_token}`
},
json: true
};
// console.log(`Fetching circles at ${LIFE360_CIRCLES_URL}`);
request(options)
.then(response => {
let circles = response.body.circles;
console.log("Returning circles: " + JSON.stringify(circles));
resolve(circles);
});
});
}
location.js中调用服务端方法(getCircles
)的客户端方法:
let circles = node.server.getCircles();
console.log("circles = " + JSON.stringify(circles));
这是我在日志中得到的内容(我编辑了 ID,但我不知道是否需要):
circles = {"isFulfilled":false,"isRejected":false}
Returning circles: [{"id":"xxxxxxxx","name":"Rob's Homes","color":"da22d5","type":"basic","createdAt":"1379025809","memberCount":"4","unreadMessages":"0","unreadNotifications":"0","features":{"ownerId":null,"skuId":null,"premium":"0","locationUpdatesLeft":0,"priceMonth":"0","priceYear":"0","skuTier":null}},{"id":"xxxxxxxx","name":"Rob's Family","color":"f05929","type":"basic","createdAt":"1393782349","memberCount":"4","unreadMessages":"0","unreadNotifications":"0","features":{"ownerId":null,"skuId":null,"premium":"0","locationUpdatesLeft":0,"priceMonth":"0","priceYear":"0","skuTier":null}},{"id":"xxxxxxxx","name":"Leach Family","color":"7f26c2","type":"basic","createdAt":"1393785316","memberCount":"6","unreadMessages":"0","unreadNotifications":"0","features":{"ownerId":null,"skuId":null,"premium":"0","locationUpdatesLeft":0,"priceMonth":"0","priceYear":"0","skuTier":null}}]
this gets called after the end of the main stack. the value received and returned is: [{"id":"xxxxxxxx","name":"Rob's Homes","color":"da22d5","type":"basic","createdAt":"1379025809","memberCount":"4","unreadMessages":"0","unreadNotifications":"0","features":{"ownerId":null,"skuId":null,"premium":"0","locationUpdatesLeft":0,"priceMonth":"0","priceYear":"0","skuTier":null}},{"id":"xxxxxxxx","name":"Rob's Family","color":"f05929","type":"basic","createdAt":"1393782349","memberCount":"4","unreadMessages":"0","unreadNotifications":"0","features":{"ownerId":null,"skuId":null,"premium":"0","locationUpdatesLeft":0,"priceMonth":"0","priceYear":"0","skuTier":null}},{"id":"xxxxxxxx","name":"Leach Family","color":"7f26c2","type":"basic","createdAt":"1393785316","memberCount":"6","unreadMessages":"0","unreadNotifications":"0","features":{"ownerId":null,"skuId":null,"premium":"0","locationUpdatesLeft":0,"priceMonth":"0","priceYear":"0","skuTier":null}}]
为什么我不能从客户端的服务器方法获取控制台中报告的值?
我曾尝试将“解决”放在各个地方,但我似乎无法弄清楚将其放在何处才能将承诺转化为客户端的内容。
在一个实验中,我尝试为它提供一个回调方法getCircles
,node.send([{payload: circles}])
最终将圆形数据从我正在处理的节点红色节点中发送出去。然后我试着让它返回圆圈,我仍然得到未解决的承诺对象。
在 ../index.js 中还有另一种名为 getCircle 的方法,location.js 使用它来提取成员数据,这很有效......也许我需要编辑 getCircles 来构建和返回数据(圈子 ID 的哈希 -> 圈子名称) 是我在收到圈子数据后打算建的?
解决方案
推荐阅读
- javascript - NodeJS For 循环承诺
- typescript - 无法将复杂数据分配给Angular 6中的数组变量
- amazon-web-services - 获取错误“不支持指定的 HTTP 版本。” 使用 nginx 代理时,传递签名的 url 以在 AWS S3 中下载文件
- c# - char.MaxValue 与字符串索引搜索有什么关系?
- css - 视频网格,动画放大一个,保持其余部分的结构?
- python - 使用 tf.keras.application 时如何获得中间输出
- bash - env:bash:没有这样的文件或目录
- php - LARAVEL:main():打开失败需要'vendor\autoload.php'
- ansible - 如何在 ansible-playbook 命令中传递主机列表?
- reactjs - 使用反应路由器处理后退按钮