在 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/awaitbluebird,您可以这样链接:

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))