0

我正在帮助使用 Discord 机器人,并且正在使用 node.js。我需要从两个单独的 json 提要中获取结果,并为此使用 request-promise。

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 人。谢谢,如果你能帮忙。

4

1 回答 1

2

我会推荐你​​使用 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。使用蓝鸟的承诺,您可以:

const Promise = require('bluebird');

Promise.coroutine(function*() {
   let val_1 = yield tableRequest();
   let val_2 = yield playersRequest();
   // Now you could use the values
})

如果您不想使用async/awaitor中的任何一个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))
于 2017-09-28T12:26:09.597 回答