node.js - 请求未 promise 发送

标签 node.js es6-promise node-request

我已经 promise 同步完成三个操作。首先,插入数据库并解析该插入的 id。其次,编辑我的 json 对象以包含从数据库中最后插入的 id。第三,使用 npm 请求发送 post 请求。这一切都包含在一个快速端点中。

但是,请求调用似乎没有发布到我的 API。我已经检查,删除了 promise 依赖项(这是从数据库获取最后插入的 ID 所需的),并使用完全相同的请求结构成功发布了数据。这让我相信 我的 promise 有问题。有人可以帮忙吗?

function db() {
  return new Promise(function(resolve, reject) {
     db.run(`INSERT INTO scan_requests(name, date) VALUES(?,?);`, [req.body.name,req.body.date], function(err) {
        if (err) {
           console.log(err)
        }
        let q = this.lastID
        resolve(q)
    })
  })
}

db()
  .then(function(q) {
     let data = {
        url: 'https://api/key/',
        body: {
          name: req.body.name,
          scan_callback: `http://localhost:80/${q}` 
        },
        json: true
     }
     return(data)
}).then(function(data) {
     res.json(req.body)
     request
        .post(data)
        .on('error', function(err) {
           console.log(err)
        })
        .pipe(res)      
})

最佳答案

为了链接 Promise,解析回调(在 then 中执行)需要返回另一个 Promise,因此您可以将另一个 then 链接到第一个 Promise。

就像这样:

function db() {
            return new Promise(function (resolve, reject) {
                const str = 'Message from first Promise'
                resolve(str)
            })
        }
        db()
            .then(function (outputFromFirstPromise) {
                return new Promise(function (resolve, reject) {
                    const somethingElse = ', and output from second promise'
                    const result = outputFromFirstPromise + somethingElse
                    resolve(result)
                })
            })
            .then(function (outputFromSecondPromise) {
                // do something with outputFromSecondPromise
            })

在你的情况下,根本不需要中间的 promise 。如果没有任何异步需要处理,为什么要使用 Promise 来构造对象data?只需将所有内容放入第一个 promise 的回调中即可。:

db().then(function (q) {
        let data = {
            url: 'https://api/key/',
            body: {
                name: req.body.name,
                scan_callback: `http://localhost:80/${q}`
            },
            json: true
        }

        res.json(req.body)
        request
            .post(data)
            .on('error', function (err) {
                console.log(err)
            })
            .pipe(res)
    })

关于node.js - 请求未 promise 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53288237/

相关文章:

json - 如何在 Gatsby 中从单个 json 文件创建多个页面

javascript - 在许多 promise 链之间共享全局已解决的 promise 会导致内存泄漏或性能下降吗?

node.js - 无法使用 Node 请求模块在 Linux 上读取 LinkedIn 内容

node.js - 比较两个 websocket 的实时数据

node.js - OAuth 中的 CORS : Response to preflight request doesn't pass access control check

node.js - 异步和递归目录扫描,用于 Nodejs 和 Expressjs 中的文件列表

javascript - 无法通过请求模块抓取数据 - 禁止

javascript - 使用 Request 在 Javascript 中发送表单数据数组?

javascript - 从不同模块访问模块数据

javascript - Promise - 在两个 Promise 之间调用一个函数