我可以让这个函数在一个文件中工作,但我想通过分成多个文件来保持清洁。
// library.js file
module.exports = {
get: () =>{
return new Promise((reject, resolve) =>{
return resolve(https.get('https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token, (res) =>{
res.setEncoding('utf8');
return res.on('data', (data) =>{
return data;
});
}));
});
}
}
我尝试记录这个,但它没有显示任何内容?
// server.js file
igLib.get().then((data) => {
console.log("testing: " + data);
})
但是,如果我只是做一个简单的日志..
// server.js file
console.log(igLib.get());
我以某种方式获取没有res.setEncoding('utf8')
的数据。
有关怎么做的提示?
更新 我无法承诺工作,我很抱歉为我提供了很好的答案,但我继续使用了请求承诺模块。这就是它的样子:
// library.js file
var instagramSelfUrl = 'https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token;
module.exports = {
get: () =>{
return rp(instagramSelfUrl).then((res) =>{
return res;
});
}
}
这是我console.log的地方:
// server.js file
igLib.get().then((data) =>{
console.log(data);
});
它更简单,它的工作原理。如果除了使用模块来解决问题之外,请让它知道并发布!感谢所有发布和帮助的人!
答案 0 :(得分:1)
您创建的承诺应使用响应中的数据解析。
// library.js file
const https = require('https');
const instagramSelfUrl = 'https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token;
module.exports = {
get: () => new Promise(function (resolve, reject) {
https.get(instagramSelfUrl, res => {
var chunks = [];
res.setEncoding('utf8');
res.on('data', chunk => chunks.push(chunk));
res.on('end', () => resolve(chunks.join('')));
});
})
};
事实上,以上是不完整和脆弱的。例如,请求错误或响应状态500应该拒绝承诺,但是没有错误处理。或者当响应不是真正的UTF-8时,它将不正确地解码数据。这些只是这里最明显的两个问题。
HTTP请求的宣传是一个已解决的问题。我强烈建议您使用one of the available libraries而不是滚动自己的代码,这会再次造成所有错误。
const request = require('request-promise');
const instagramSelfUrl = 'https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token;
module.exports = {
get: () => request(instagramSelfUrl)
};
现在功能已经完成并且行为正常,即使在极端情况下也是如此。它也很短,根本没有理由写一个单独的功能。
答案 1 :(得分:0)
似乎你没有正确地返回数据试试这个:
// library.js file
module.exports = {
get: () =>{
return new Promise((reject, resolve) =>{
https.get('https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token, (res) =>{
res.setEncoding('utf8');
return res.on('data', (data) =>{
return resolve(data);
});
});
});
}
}
答案 2 :(得分:0)
你可以做这样的事情
module.exports = {
get: () =>{
return new Promise((resolve, reject) =>{
https.get('https://api.instagram.com/v1/users/self/?access_token=' + cred.access_token, (res) =>{
res.setEncoding('utf8');
res.on('data', (data) =>{
resolve(data);
});
}).on('error', (e) => reject(e))
});
}
}
有关承诺的更多信息,您可以访问https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise