请求不发送承诺
Request not sending in promise
我已经串起同步完成三个动作的承诺。首先,插入数据库并解析该插入的 ID。其次,编辑我的 json 对象以包含数据库中最后插入的 ID。第三,使用 npm requests 发送 post 请求。这一切都包含在一个快速端点中。
但是,请求调用似乎没有 post 发送到我的 API。我已经检查,删除了承诺依赖项(这是从数据库中获取最后插入的 id 所必需的),并使用完全相同的请求结构成功地 posted 数据。这让我相信
我的承诺有问题。有人可以帮忙吗?
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)
})
要链接承诺,解析回调(在 then
中执行)需要 return 另一个承诺,因此您可以将另一个 then
链接到第一个承诺。
就像这样:
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,如果您没有要处理的异步内容,仅用于构造您的对象 data
?只需将所有内容放入您的第一个承诺的回调中即可。:
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)
})
我已经串起同步完成三个动作的承诺。首先,插入数据库并解析该插入的 ID。其次,编辑我的 json 对象以包含数据库中最后插入的 ID。第三,使用 npm requests 发送 post 请求。这一切都包含在一个快速端点中。
但是,请求调用似乎没有 post 发送到我的 API。我已经检查,删除了承诺依赖项(这是从数据库中获取最后插入的 id 所必需的),并使用完全相同的请求结构成功地 posted 数据。这让我相信 我的承诺有问题。有人可以帮忙吗?
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)
})
要链接承诺,解析回调(在 then
中执行)需要 return 另一个承诺,因此您可以将另一个 then
链接到第一个承诺。
就像这样:
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,如果您没有要处理的异步内容,仅用于构造您的对象 data
?只需将所有内容放入您的第一个承诺的回调中即可。:
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)
})