let request = require('request');
async function getbdstoken() {
let res = '';
await request(options, function(error, response, body) {
let regex = /\"bdstoken\":\"(.*)\",\"quota/;
res = body.split(regex)[1];
console.log(res);
});
console.log('res', res);
return res;
}
console.log(getbdstoken());
输出结果如下:
Promise { <pending> }
res
1779b579e4340c33cf27a89a0c80b420
原因如下:
-
getbdstoken()
是个async
函数,和普通函数不一样,不会执行完再返回结果,所以会返回Promise { <pending> }
-
request
函数不是Promise
,await
会把该值转换为已正常处理的Promise
,而不是将等待Promise
正常处理完成并返回其处理结果
如果把上面的 require('request')
改成 require('request-promise')
,输出将变成:
Promise { <pending> }
1779b579e4340c33cf27a89a0c80b420
res 1779b579e4340c33cf27a89a0c80b420
正确的代码
let request = require('request-promise');
async function getbdstoken() {
let res = '';
await request(options, function(error, response, body) {
let regex = /\"bdstoken\":\"(.*)\",\"quota/;
res = body.split(regex)[1];
console.log(res);
});
console.log('res', res);
return res;
}
getbdstoken().then(res => {
console.log(res);
});