在我的代码中,我尝试为json
变量分配一个值以在之后返回它(因为我无法从匿名函数中返回它)。
由于我的函数是异步的,因为它发送请求(也许有人知道如何使其同步?我不打算使其异步),所以我在请求之前添加了await
({{1 }}。
我一直在尝试从Promise中获得价值,尽管我一直在等待异步功能,但它始终是https.get
。
这是一个代码:
undefined
答案 0 :(得分:1)
在调用Promise
事件时返回resolve
和end
,否则,在发生错误的情况下返回reject
:
async function get_users() {
const https = require('https');
const token = '...';
return new Promise((resolve, reject) => {
https.get('...', resp => {
let data = '';
resp.on('data', chunk => {
data += chunk;
});
resp.on('end', () => {
let json;
try {
json = JSON.parse(data)['response']['items'];
} catch (e) {
reject(e);
};
resolve(json);
});
}).on("error", err => reject(err));
});
}
get_users().then(result => console.log(result));
答案 1 :(得分:0)
请参考下面的代码。我也无法从Promises处获得响应。但是我终于使它起作用了。这是代码:
var output;
var rp = require('request-promise-native');
var myJSONObject = {
"inputs": [{
"name": "<name>",
"value": < value >
}]
};
var orchName = 'TEST05';
postData = JSON.stringify(myJSONObject);
return networkCall(postData, orchName).then((response) => {
console.log('response is' + response)
}).catch((response) => {
console.log(`ERROR: ` + response);
});
function networkCall(postData, orchName) {
return new Promise((resolve, reject) => {
var options = {
method: 'post',
uri: '<URL>',
body: postData,
auth: {
'user': 'usr',
'pass': 'pwd'
},
json: true
};
return rp(options)
.then(body => {
var response = body;
resolve(response);
})
.catch(err => {
console.log('FAILED' + err);
reject(err);
});
});
}
这样,您的代码就可以在同步流中运行。如果返回值为undefined
,则可能发生的情况是,即使在被调用函数返回其响应之前,调用函数也将完成执行。以上方法就可以了。