首页 > 解决方案 > 为什么客户端没有收到服务器检索的数据?

问题描述

我以前从未做过这种事情,我有点跳入深渊,但我觉得我真的很接近。我正在尝试将动态填充的选择列表添加到节点红色节点的编辑对话框中。我在客户端编写了一个方法,该方法调用了我在服务器中编写的方法。调用执行。服务器检索数据(通过调试打印到控制台确认),但客户端接收到的不是数据。我以前没有太多的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}}]

为什么我不能从客户端的服务器方法获取控制台中报告的值?

我曾尝试将“解决”放在各个地方,但我似乎无法弄清楚将其放在何处才能将承诺转化为客户端的内容。

在一个实验中,我尝试为它提供一个回调方法getCirclesnode.send([{payload: circles}])最终将圆形数据从我正在处理的节点红色节点中发送出去。然后我试着让它返回圆圈,我仍然得到未解决的承诺对象。

在 ../index.js 中还有另一种名为 getCircle 的方法,location.js 使用它来提取成员数据,这很有效......也许我需要编辑 getCircles 来构建和返回数据(圈子 ID 的哈希 -> 圈子名称) 是我在收到圈子数据后打算建的?

标签: javascriptnode.jspromiseclient-server

解决方案


推荐阅读