Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在node.js中将两个请求承诺链接在一起需要一些帮助_Node.js_Request_Discord_Request Promise - Fatal编程技术网

在node.js中将两个请求承诺链接在一起需要一些帮助

在node.js中将两个请求承诺链接在一起需要一些帮助,node.js,request,discord,request-promise,Node.js,Request,Discord,Request Promise,我正在帮助一个Discord机器人,我正在使用node.js。我需要从两个单独的json提要中获取结果,并使用请求承诺 tableRequest().then(function(val) { console.log(val); }).catch(function(err) { console.err("Something went wrong"); }); playersReques

我正在帮助一个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


这根本不是我的专长。。我是个鼓手。如果您能提供帮助,谢谢。

我建议您使用ES7:

然后,代码将变为:

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
}
如果你仍然要使用承诺,你可以使用。使用蓝鸟的承诺,您可以:

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

我建议您使用ES7:

然后,代码将变为:

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
}
如果你仍然要使用承诺,你可以使用。使用蓝鸟的承诺,您可以:

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

哇,我看了这么多的答案,感到很困惑。。我将在大约30分钟内尝试这些,希望能取得一些成功。看起来不错。@NiallMurphy还添加了链接逻辑。我不得不更新node的版本,但最终使async/await与您的代码完美配合。非常感谢。哇,我看了这么多的答案,感到很困惑。。我将在大约30分钟内尝试这些,希望能取得一些成功。看起来不错。@NiallMurphy还添加了链接逻辑。我不得不更新node的版本,但最终使async/await与您的代码完美配合。非常感谢。