【问题标题】:How to solve Arango query promise error? [duplicate]如何解决 Arango 查询承诺错误? [复制]
【发布时间】:2018-02-24 18:24:37
【问题描述】:

我一直在尝试使用肥皂消息从 Arangodb 获取查询结果到我的前端服务 (Angular 4)。我能够得到查询结果,但在 console.log 中打印出来。但是在这个函数(Service)下怎么获取呢。

这样我就可以输入肥皂消息:

var soap_msg = '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:CheckUserNameService">' +
  '<soapenv:Header/>' +
  '<soapenv:Body>' +
  '<urn:CheckUserNameResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
  '<status xsi:type="xsd:string">' + (Service) + '</status>' +
  '</urn:CheckUserNameResponse>' +
  '</soapenv:Body>' +
  '</soapenv:Envelope>';

我发布了这个问题,得到一个回复​​说使用 await 或 .this(),然后我更新了我的代码,但错误仍然存​​在。

我试图用这样的字符串输入一个随机变量来检查肥皂味,

var payload = [null,"192.168.72.237"];

它工作正常。查询有问题

var Service = db.query(aqlQuery `
             LET startVertex = (FOR doc IN spec
             FILTER doc.serial_no == '"123456abcde"'
             LIMIT 2
             RETURN doc
             )[0]

            FOR v IN 1 ANY startVertex belongs_to
            RETURN v.ip`, {
  bindVar1: 'value',
  bindVar2: 'value',
}).then(function(res) {
  console.log("doc" + res._result);
})

版本是

  • “节点”:“8.9.4”
  • “arangojs”:“^5.8.0”,
  • “快递”:“^4.16.2”,
  • “express-generator”:“^4.15.5”

我不知道从这里开始。

【问题讨论】:

  • 只是为了确认一下,您要查找的 doc.serial_no 在单引号内有双引号,这意味着键 serial_no 需要具有值 "123456abcde" 并带有双引号它。如果双引号不在其中,请记住删除它们。
  • 你连相关代码都没有贴出来。问题仍然是 Service 是一个承诺,以及您如何在其他地方使用 Service 值。
  • 我想我之前已经提醒过你,一个以乞讨为特征的问题可能写得很仓促,仓促写出的问题很少是好问题。请注意,读者并不关心您被卡住了多久,并且被卡住了很长时间不会(也不应该)导致您的问题被优先考虑。 志愿者会回答他们喜欢的问题,他们会在闲暇时回答
  • 此外,如果您可以避免在所有材料中添加“请帮助我”之类的恳求陈述,我们将不胜感激。读者不希望你在社区面前苦苦哀求——保持你的问题简洁、详细、深入研究和独特,这样你会做得更好。
  • @halfer 是的,我接受了你的建议,我正在以适当的方式提出我的问题..,我以后会避免使用这些 cmets。谢谢你让我知道 :)

标签: node.js promise arangodb aql


【解决方案1】:

要让 promise 为您解析,有必要调用游标的 .all 函数,以便它返回值。

This site 有一个很好的例子:

db.query('FOR doc IN documents RETURN doc')
  .then((cursor) => { return cursor.all() })
  .then((doc) => { console.log(doc) });

然后调用第一步返回的promise提取记录,游标返回的是你要找的文档。

例如

var Service = db.query(aqlQuery `
             LET startVertex = (FOR doc IN spec
             FILTER doc.serial_no == '"123456abcde"'
             LIMIT 2
             RETURN doc
             )[0]

            FOR v IN 1 ANY startVertex belongs_to
            RETURN v.ip`, {
  bindVar1: 'value',
  bindVar2: 'value',
}).then(function(cursor) { // Add this to return the documents in the promise
     return cursor.all()  
}).then(function(res) {
  console.log("doc" + res._result);
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2020-09-07
    • 2016-06-13
    • 2020-02-12
    • 2020-04-28
    相关资源
    最近更新 更多