我正在创建一个POST请求,如果请求成功,我正在创建一个Cisco Spark聊天室(类似于slack)。在POST请求中,我正在更新POST请求成功中的变量(数组)的一部分以及Cisco Spark聊天室创建成功中的变量的其他部分。
所以我认为我需要嵌套的承诺,以便我可以根据需要提供整个变量。但我不知道该怎么做。
原始代码如下所示:
var request = require('request');
var array = [];
myObj = new Object()
request.post({
url: urlServiceNow,
headers: headers,
rejectUnauthorized: false,
requestCert: false,
agent: false,
},function (response, err, body){
var createJSON = JSON.parse(body);
array.push(createJSON.result.sys_id);
}.bind(this));
ciscospark.rooms.create({title: `AppDNotification`})
.then((room) => {
array.push(room.id)
myObj[valEventTime] = array;
imdb.push(myObj)
return Promise.all([
//more code
]).catch((error) => {
console.log(`Error: \n${error}`);
})
.then(() => ciscospark.messages.create({
markdown: messageToSend,
roomId: room.id
}))
.catch( (error) => {
console.log(`Error: \n${error}`);
});
});
我在.bind之后使用.then更新了代码,如下所示
request.post({
url: urlServiceNow,
headers: headers,
rejectUnauthorized: false,
requestCert: false,
agent: false,
},function (response, err, body){
var createJSON = JSON.parse(body);
array.push(createJSON.result.sys_id);
}.bind(this))
.then(() => ciscospark.rooms.create({title: `AppDNotification`}))
.then((room) => {
//rest of the code
})
但我收到错误
TypeError: request.post(...).then is not a function
请建议。
答案 0 :(得分:2)
查看请求的文档promises are not supported:
请求本身支持流式传输和回调接口。如果您希望请求返回Promise,则可以使用备用接口包装器来请求。如果你喜欢使用Promises,或者你想在ES2017中使用async / await,这些包装器会很有用。
文档继续建议使用支持承诺的几个不同版本中的一个:
request-promise(使用蓝鸟承诺)
request-promise-native(使用原生承诺)
request-promise-any(使用任何承诺的承诺)
答案 1 :(得分:0)
使用request-promise
var rp = require('request-promise');
// Configure the POST request
var optionsPOST = {
url: urlServiceNow,
method : 'POST',
headers : headers,
rejectUnauthorized: false,
requestCert: false,
agent: false
}
rp(optionsPOST)
.then(function (parsedBody) {
var post = JSON.parse(parsedBody);
console.log(post)
console.log(post.result.sys_id)
ciscospark.rooms.create({title: `AppDNotification`})
.then((room) => {
return Promise.all([
ciscospark.memberships.create({
roomId: room.id,
personEmail: `abc@example.com`
}),
ciscospark.memberships.create({
roomId: room.id,
personEmail: `abc@example.com`
}),
]).catch((error) => {
//Handle Error Here
console.log(`Error: \n${error}`);
})
.then(() => ciscospark.messages.create({
markdown: "Hi",
roomId: room.id
}))
.catch( (error) => {
console.log(`Error: \n${error}`);
});
});
})
.catch(function (err) {
console.log("fail")
});