【问题标题】:JS: ERROR: "Promise { <pending> }" with SocketsJS:错误:带有套接字的“Promise { <pending> }”
【发布时间】:2017-04-01 00:20:21
【问题描述】:

我在使用 Promise 时遇到问题,当我尝试检索数据时显示为 Promise { &lt;pending&gt; } 我已经查找了一些相关信息,但我不明白如何结束它。 如果有人可以帮助我,我将不胜感激。

提前致谢

    /bucket.js
    'use strict'

    const   connection  = require('../server/models'),
            oracledb    = require('oracledb'),
            conexion    = oracledb.getConnection(connection)

    oracledb.outFormat  = oracledb.OBJECT

    module.exports  = (data) => {
      console.log("RES: ", filter(data));
      return filter(data)
    }

    const filter  = (value) =>  {
        return conexion
        .then(con =>  {
          return con.execute(
            `SELECT id_application, name, description, creation_date ` +
            `FROM application `
          ).then(bucket =>  {
            return con.execute(
              `SELECT id_definition, id_application, field_name_original,
               field_name_new, column_name, position, id_type_data,
               field_size, creation_date, description, filter, visible ` +
              `FROM definition ` +
              `WHERE id_application in (${getApp(value.data)}) ` +
              `AND ${value['search']} = '${value['value']}' `
            ).then(definitions => { return creaJSON(bucket, definitions) } )
             .catch(error =>  { return {"error": error} })
          })
           .catch(error =>  { return {"error": error} })
        })
        .catch(error =>  { return {"error": error} })
    }

    const getApp = (value) =>  {
      return value.map(obj =>  {
        return `'${obj.ID_APPLICATION}'`
      })
    }

    const creaJSON = (buckets, definitions)  => {
      var df = new Array()
      buckets['rows'].map(obj =>  {
        definitions['rows'].map(def =>  {
          if(obj['ID_APPLICATION'] == def['ID_APPLICATION']) df.push(def)
        })
        obj['Definitions'] = df
        df = []
      })
      return buckets.rows
    }

更新

我的错误不仅仅出现在上面的代码中。我正在使用套接字以及 Bergi 的答案,我无法在客户端得到回应。我有下一个代码:

socket.on('bucketVisibleT', (data)  =>  {
  buckets = {data:data,search:'VISIBLE',value:'T'}
  io.sockets.emit('bucketVisibleFs', require('./bucket')(buckets))
})

所以我不得不改变下一个,现在我在我的客户中得到了回应。

socket.on('bucketVisibleT', (data)  =>  {
  buckets = {data:data,search:'VISIBLE',value:'T'}
  require('./bucket')(buckets).then(res => {
    io.sockets.emit('bucketVisibleTs', res)
  })
})

我很抱歉,因为我没有很好地解释我的问题,但我认为这是在我的第一个代码中

【问题讨论】:

  • 您在哪里以及如何尝试检索该数据?当你的函数返回一个 Promise 时,你的函数就可以工作了——你只需要等待它异步完成来访问数据。
  • 第 11 行:返回过滤器(数据)

标签: node.js promise es6-promise


【解决方案1】:

filter 返回一个 Promise,因此与其他返回 Promise 的函数一样,如果您想对结果执行某些操作,您需要链接一个 then 调用:

module.exports = (data) =>
  filter(data).then(res => {
    console.log("RES: ", res);
    return res;
  });

【讨论】:

  • 非常感谢,我之前已经尝试过但没有成功,但这是因为此响应通过套接字发送到客户端。我需要找到一种方法来获得良好的响应,就像您的答案一样,但在客户端。再次感谢您。
  • 我刚刚用真正的问题更新了上面的代码,但答案与您的相同,但部分不同。再次感谢您。
猜你喜欢
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2019-08-02
  • 2019-02-02
  • 1970-01-01
  • 2019-05-10
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多