Javascript 从承诺返回字符串值
在下面的代码中,您可以看到我发出了一个HTTP请求。我解析响应并拉出一个“token”(字符串)。我想返回该令牌,以便将其值分配给fooJavascript 从承诺返回字符串值,javascript,node.js,node-request,Javascript,Node.js,Node Request,在下面的代码中,您可以看到我发出了一个HTTP请求。我解析响应并拉出一个“token”(字符串)。我想返回该令牌,以便将其值分配给foo foo = request.post( { url: 'http://10.211.55.4/api/2.0/auth/signin', body: reqLogin.toString(), headers: {'Content-Type': 'text/xml'}
foo = request.post(
{
url: 'http://10.211.55.4/api/2.0/auth/signin',
body: reqLogin.toString(),
headers: {'Content-Type': 'text/xml'}
},
function(err, response, body) {
if(err) {
console.log(err);
process.exit(1);
}
else {
parseString(body, function (err, result) {
tokencontainer = (result.tsResponse.credentials[0]);
token = tokencontainer.$.token;
console.log('Logged in, token is ', token);
return token;
});
}
}
);
当我运行这段代码时,foo的对象类型是Request。我是否可以将整个请求转换为“string”,这样就不会将请求对象分配给foo?我只想将“token”值分配给变量
谢谢 如果您正在使用Mikeal的请求库,.post()方法(或任何其他方法)不会返回承诺(即使它返回了承诺,您也无法以这种方式分配值(而不是承诺) 因此,您的选择是:
var logicUsingFoo = function(foo) {
// do stuff with foo here
};
request.post({...}, function (err, response, body) {
// ...
logicUsingFoo(token);
});
// Here, you can't really use foo, because request.post() has not yet
// finished. In Javascript, there's no way to pause program execution.
// You need to either use callbacks, or promises.
选项2
例如(使用):
然后使用它:
promisePost({url: ..., headers: ...}).then(function (body) {
// Do stuff with body, obtain token etc.
}, function (err) {
// Handle error
});
选项3
例如,您可以使用Kris Kowal,他创建了广泛使用的Q库来实现承诺。如果您使用Mikeal的请求库,.post()方法(或任何其他方法)不会返回承诺(即使它返回了承诺,您也无法通过这种方式(而不是承诺)分配值 因此,您的选择是:
var logicUsingFoo = function(foo) {
// do stuff with foo here
};
request.post({...}, function (err, response, body) {
// ...
logicUsingFoo(token);
});
// Here, you can't really use foo, because request.post() has not yet
// finished. In Javascript, there's no way to pause program execution.
// You need to either use callbacks, or promises.
选项2
例如(使用):
然后使用它:
promisePost({url: ..., headers: ...}).then(function (body) {
// Do stuff with body, obtain token etc.
}, function (err) {
// Handle error
});
选项3
例如,你可以使用Kris Kowal的作品,他创建了广泛使用的承诺Q库。X和Y问题,查一下。当你知道只有在未来,当请求得到响应时才能设置foo时,尝试设置foo有什么意义?人们会回答你,但这对你的情况没有帮助。你的公司的所有后续操作de必须是异步的。如何返回承诺?请学习使用局部变量。所有的
foo
、tokencontainer
和token
都是隐式全局的。X和Y问题,请查找它。当您知道foo只能在将来设置时,当请求得到响应时,尝试设置foo有什么意义?人们会我回答你,但这对你的情况没有帮助。你代码中的所有后续操作都必须是异步的。如何返回承诺?请学习使用局部变量。所有foo
、tokencontainer
和token
都是隐式全局的。谢谢。我正在使用该库。将使用选项#1tanks。我正在使用该库y、 将使用选项1