在 node.js 中将两个请求-承诺链接在一起需要一些帮助
Some help needed chaining two request-promises together in node.js
我正在帮助 Discord 机器人,我正在使用 node.js。我需要从两个单独的 json 提要中获取结果,并为此使用请求承诺。
tableRequest().then(function(val) {
console.log(val);
}).catch(function(err) {
console.err("Something went wrong");
});
playersRequest().then(function(val) {
console.log(val);
}).catch(function(err) {
console.err("Something went wrong");
});
每个函数的顶部如下所示。
function tableRequest(){
return new Promise(function(resolve, reject){
request('http://xxx.xxx.xxx.xxx/table', function (error, response, body) {
当我 运行 我的代码时,两组数据都很好地记录到控制台,但从我读到的内容来看,这并不正确。然后我如何在其他地方使用这两个 val
?
这不是我的强项。我是一个 Drupal 人。如果你能帮忙,谢谢。
我会推荐你使用 ES7 async/await:
代码将变为:
async function myFunction() {
let val_1 = await tableRequest();
let val_2 = await playersRequest()
return {val_1, val_2}; // This way you could use the values
// inside another function
}
如果您仍然必须使用 promise,则可以使用 bluebird library。使用 bluebird 的承诺,您可以:
const Promise = require('bluebird');
Promise.coroutine(function*() {
let val_1 = yield tableRequest();
let val_2 = yield playersRequest();
// Now you could use the values
})
如果您不想使用 async/await
或 bluebird
,您可以这样链接:
let val_1, val_2;
tableRequest().then(val => {
val_1 = val;
// Do something and return
return foo;
})
.then(foo => playersRequest())
.then(val => {
val_2 = val;
})
.catch(e => console.log(e))
我正在帮助 Discord 机器人,我正在使用 node.js。我需要从两个单独的 json 提要中获取结果,并为此使用请求承诺。
tableRequest().then(function(val) {
console.log(val);
}).catch(function(err) {
console.err("Something went wrong");
});
playersRequest().then(function(val) {
console.log(val);
}).catch(function(err) {
console.err("Something went wrong");
});
每个函数的顶部如下所示。
function tableRequest(){
return new Promise(function(resolve, reject){
request('http://xxx.xxx.xxx.xxx/table', function (error, response, body) {
当我 运行 我的代码时,两组数据都很好地记录到控制台,但从我读到的内容来看,这并不正确。然后我如何在其他地方使用这两个 val
?
这不是我的强项。我是一个 Drupal 人。如果你能帮忙,谢谢。
我会推荐你使用 ES7 async/await:
代码将变为:
async function myFunction() {
let val_1 = await tableRequest();
let val_2 = await playersRequest()
return {val_1, val_2}; // This way you could use the values
// inside another function
}
如果您仍然必须使用 promise,则可以使用 bluebird library。使用 bluebird 的承诺,您可以:
const Promise = require('bluebird');
Promise.coroutine(function*() {
let val_1 = yield tableRequest();
let val_2 = yield playersRequest();
// Now you could use the values
})
如果您不想使用 async/await
或 bluebird
,您可以这样链接:
let val_1, val_2;
tableRequest().then(val => {
val_1 = val;
// Do something and return
return foo;
})
.then(foo => playersRequest())
.then(val => {
val_2 = val;
})
.catch(e => console.log(e))