Javascript 谷歌云功能请求/恢复,承诺按节点获取
我对Javascript完全是个新手,试图在我使用的两个服务之间架起一座桥梁。目标是简单地获取主体或请求,对另一个服务执行promise api调用,以响应该api调用的主体。我已经能够获取请求的主体并将其发送到服务,但是我在接收该响应并将该响应的主体作为函数的响应时遇到了问题。请帮帮我。多谢各位Javascript 谷歌云功能请求/恢复,承诺按节点获取,javascript,node.js,promise,google-cloud-functions,node-fetch,Javascript,Node.js,Promise,Google Cloud Functions,Node Fetch,我对Javascript完全是个新手,试图在我使用的两个服务之间架起一座桥梁。目标是简单地获取主体或请求,对另一个服务执行promise api调用,以响应该api调用的主体。我已经能够获取请求的主体并将其发送到服务,但是我在接收该响应并将该响应的主体作为函数的响应时遇到了问题。请帮帮我。多谢各位 var moment = require('moment'); var CryptoJS = require("crypto-js"); const fetch = require('node-fet
var moment = require('moment');
var CryptoJS = require("crypto-js");
const fetch = require('node-fetch');
var unixtime = moment().unix();
var apiUser = process.env.apiUser;
var secret = process.env.apiKey;
var url = process.env.url;
exports.test = (req, res) => {
var message = req.body;
message = JSON.stringify(message);
var body = "{\n \"ops\": [{\n \"conv_id\": \"679690\",\n \"type\": \"create\",\n \"obj\": \"task\",\n \"data\": message\n }]\n}\n"
body = body.replace(/message/ig, message);
var signature = CryptoJS.enc.Hex.stringify(CryptoJS.SHA1(unixtime + secret + body + secret));
function request1() {
return new Promise((resolve, reject) => {
var options = fetch(url+apiUser+'/'+unixtime+'/'+signature, {
method: 'post',
body: body,
headers: { 'Content-Type': 'application/json' },
});
options.then(res => {
var result = res.json;
console.log(result);
resolve(result);
})
.catch(() => { // if .then fails
console.log('Promise rejected');
let rejectMessage = 'Sorry, an error occurred.';
reject(rejectMessage); // Promise rejected
});
});
}
request1();
};
您可以轻松检索
result
对象,因为函数request1
返回解析该对象的承诺,所以这应该可以:
request1().then((resultObject)=>{
//resultObject === result
return res.send(resultObject);
});
另外,res.json()
返回一个承诺,因此您应该执行以下操作:
options.then(res => res.json()).then(result => {
console.log(result);
resolve(result);
})
您可以轻松检索
result
对象,因为函数request1
返回解析该对象的承诺,所以这应该可以:
request1().then((resultObject)=>{
//resultObject === result
return res.send(resultObject);
});
另外,res.json()
返回一个承诺,因此您应该执行以下操作:
options.then(res => res.json()).then(result => {
console.log(result);
resolve(result);
})
所以您只想作为响应发送
结果
对象(内部选项承诺)?是的。更具体地说,result.body.ops.dataSo您只想作为响应发送result
object(内部选项承诺)?是的。更具体地说,result.body.ops.dataresult会导致超时,因为它不知道什么是resultObject
-结果是什么?很抱歉,如果要将该对象作为响应发送,可以使用返回res.send(resultObject)
因此输出为空,而对于当前代码,它应该是json
,就像我的console.log(result)一样代码>哪个日志json
非常感谢!!!工作得很有魅力!您还可以告诉我,在res=>res.json())
中,我需要指定作为结果返回的响应正文的哪一部分吗?谢谢您是的,res.json()
将fetch
函数的响应以同步方式转换为json对象,这就是为什么您必须调用。然后再次调用。由于它不知道resultObject
是什么,因此会导致超时-抱歉,如果要将该对象作为响应发送,可以使用return res.send(resultObject)
因此输出为空,而对于当前代码,它应该是json
,就像我的console.log(result)一样代码>哪个日志json
非常感谢!!!工作得很有魅力!您还可以告诉我,在res=>res.json())
中,我需要指定作为结果返回的响应正文的哪一部分吗?谢谢是的,res.json()
将fetch
函数的响应以同步方式转换为json对象,这就是为什么必须调用。然后再次调用。