从promise解析调用返回数据
Passing data back from a promise resolve call
我试图调用一个函数,然后在返回的参数中返回一些数据,我使用promise,但我无法返回返回的数据。
我这里有电话:
fbUserInfo(recipientId,req).then(function(){
getSessionData(FB_ID).then(function(rowsJson){
console.log('%%%%%%%%' + JSON.stringify(rowsJson));
})
})
我的功能在这里定义
/*
* FUNCTION: getSessionData
* PURPOSE : Get the session data into global variables
*/
function getSessionData(FB_ID){
var gender, user_name;
var rowsJson = {'gender': gender, 'user_name': user_name };
console.log('START to get client data');
return new Promise((resolve,reject) => {
client.hmget(FB_ID,'gender',function(err,reply){
rowsJson.gender = reply;
console.log('^^^ gender :' + rowsJson.gender);
});
client.hmget(FB_ID,'name',function(err,reply){
rowsJson.user_name = reply;
console.log('^^^ user_name :' + rowsJson.user_name);
});
resolve(rowsJson);
}); // return
} // getSessionData
/*
* FUNCTION: fbUserInfo
* PURPOSE : Called once when displaying the user welcome message
* to get the Facebook user details an place them in the
* session if they dont already exist
*/
function fbUserInfo(id,req) {
return new Promise((resolve, reject) => {
var url = 'https://graph.facebook.com/v2.6/' + id;
console.log('^^^^ url ' + url);
const options = {
method: 'GET',
uri: url,
qs: {
fields: 'first_name,last_name,profile_pic,locale,timezone,gender',
access_token: FB_PAGE_TOKEN1
},
json: true // JSON stringifies the body automatically
}
console.log('^^^ CALL RQ');
rp(options)
.then((response) => {
console.log('Suucess' + JSON.stringify(response.gender));
var profile_pic = JSON.stringify(response.profile_pic).replace(/'"/g, "");
console.log('1. profile_pic:' + profile_pic);
// Now find the position of the 6th '/'
var startPos = nth_occurrence(profile_pic, '/', 6) + 1;
console.log('1. Start Pos: ' + startPos);
// Find the position of the next '.'
var stopPos = profile_pic.indexOf(".",startPos) ;
console.log('2. Stop Pos: ' + stopPos);
FB_ID = profile_pic.substring(startPos,stopPos);
console.log('profile_pic :' + profile_pic);
console.log('FB_ID :' + FB_ID);
var gender = JSON.stringify(response.gender).replace(/'"/g, "");
var name = JSON.stringify(response.first_name).replace(/'"/g, "");
console.log('name: ' + name);
console.log('** Set session variable');
client.exists("key",FB_ID, function (err, replies) {
if(!err && replies===1){
console.log("THE SESSION IS ALREADY PRESENT ");
}else{
console.log("THE SESSION DOES NOT EXIST");
// Now create a session from this
client.hmset(FB_ID, {
'gender': gender,
'name': name
});
resolve();
}});
})
.catch((err) => {
console.log(err)
reject();
});
})
} // fbUserInfo
我得到的是:
1. profile_pic:https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/xxxxxxxxxx.jpg?oh=f43f7946f07e2bfb16fd0428da6a20e3&oe=5824B5F0
1. Start Pos: 48
2. Stop Pos: 96
profile_pic :https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/xxxxxxxxx.jpg?oh=f43f7946f07e2bfb16fd0428da6a20e3&oe=5824B5F0
FB_ID :13882352_10154200039865923_27612879517xxxxxxxx
name: Ethan
** Set session variable
^^^ gender :male
^^^ user_name :Ethan
THE SESSION DOES NOT EXIST
START to get client data
%%%%%%%%{}
您没有以正确的方式在promise中使用回调,并且您的promise在您的client.hmget函数完成之前就解决了。你需要承诺链来获得你需要的东西,或者你可以像这样快速修复:
return new Promise((resolve,reject) => {
client.hmget(FB_ID,'gender',function(err,reply){
if (err) {
return reject(err);
}
rowsJson.gender = reply;
console.log('^^^ gender :' + rowsJson.gender);
client.hmget(FB_ID,'name',function(err,reply){
if (err) {
return reject(err);
}
rowsJson.user_name = reply;
console.log('^^^ user_name :' + rowsJson.user_name);
resolve(rowsJson);
});
});
})
相关文章:
- AJAX调用并在Node中获取返回数据
- 角度服务未返回数据
- 统计ajax返回数据中的html元素
- 有没有更好的方法可以测量从Ajax调用返回数据所需的总时间
- Imgur API图像搜索未返回数据
- javascript对象显示为null,但object.properties返回数据
- 如何从ajax调用JQuery返回数据
- 试图从嵌套的回调函数返回数据
- NodeJS FS 不从多个文件返回数据
- ajax函数未在C#中返回数据
- 如何在公共js模块中从web服务返回数据
- 将字符串与 JSON 对象组合以返回数据
- 嵌套异步函数未及时返回数据的问题
- NodeJS JSONStream 以一个长字符串的形式返回数据
- 如何使用 HTML 图像请求将数据发送到服务器,或返回数据作为响应
- 从 Angular 模态服务中的模态主体模板返回数据
- jQuery 每个循环返回数据两次
- $.getJSON 在返回数据后不会运行函数
- 如何访问返回数据中的特定json值
- 工厂返回数据后未设置角度$scope