【问题标题】:How to access the data from promise如何从 Promise 访问数据
【发布时间】:2019-01-15 23:32:51
【问题描述】:

在此处输入代码我在此处的承诺声明返回未定义的结果。如何从 Promise 访问数据并使用它?这是我的代码。这将返回并显示实时时间表,但我无法访问数据并使用它们。请帮助我访问数据。谢谢!

       var async = require("async");
    var fetch = require('node-fetch');
    var Mta = require('mta-gtfs');
    var mta = new Mta({
            key:'my_api',
            feed_id: 1
    });

    fetch('http://datamine.mta.info/lists-of-feeds')


    //********************************************************************************************
    //--------------------------------------------------------------------------------------------
    //mta.stop('627').then(function (result) {
    //       console.log(result);
    //    });


    //--------------------------------------------------------------------------------------------
    /*
     function getStopInfo(StopId){
             mta.schedule(StopId).then(function (result) {
                    console.log('*****************************************')
            for (var i=0; i<5;i++)
            {
                    console.log('train '+[i+1]+ ' heading to North: '+result.schedule['627'].N[i]['arrivalTime']);
                    console.log('train '+[i+1]+ ' heading to South: '+result.schedule['627'].S[i]['arrivalTime']);
                    console.log('*****************************************')
            }


    });
    }

    function getInfo(StopId, callback){
            if (typeof callback == 'function')
            {
            console.log('works')
            callback(StopId);
            }
            else
            {
            console.log('err');
            }
    }





 //console.dir(result, {depth:null, color:true});
    //const info = getStopInfo(627);
    //console.log(info);

    var info = getInfo(627, getStopInfo);
    console.log(info);
    */

   async function getStopInfo(StopId){   //This is where the function is being pointed out for unexcepted token.
            try{
            const info = await mta.schedule(StopId);
            callback(info)
            } catch(error) {
            console.log(error)
            }
    }

getStopInfo(627, info => {
        console.log('yep' +info)
})

【问题讨论】:

标签: javascript node.js promise


【解决方案1】:

info 将是未定义的,因为您应该将 return 添加到 getStopInfo 函数中。

你的功能应该是

function getStopInfo(StopId){
    return mta.schedule(StopId).then(function (result) {
        console.dir(result, {depth:null, colors:true});
        return result;
    });
}

【讨论】:

  • 如果 OP 像在问题 const info = getStopInfo(627); 中那样使用它,你认为 info 会是他们所期望的吗?
  • @MarkMeyer 谁知道他们在期待什么?它不再返回 undefined 了,现在函数很好了。
  • 感谢您的重播。我试图删除 return 并且一切都变得未定义,如果我在这两个地方添加 return ,结果仍然是未定义的。此功能还可以显示地铁系统的实时数据。我想访问从这个函数获得的数据。此功能能够显示数据,但我无法访问数据。我应该怎么做才能访问数据?
  • 您可以使用回调将其从函数中返回...让我修改一下答案。
【解决方案2】:

因为我不知道您正在使用的确切 api 以及 mta.schedule 如何准确返回承诺数据...我在这个示例中将其删除...基本上我认为您可能会考虑使用 async /await 函数设置...在这里查看这个想法...

let Mta = require('mta-gtfs');
let mta = new Mta({
  key: 'MY-MTA-API-KEY-HERE',
});

async function getStopInfo(StopId, callback){
    try {
        const info = mta.schedule(StopId)
        callback(info)
    } catch(error){
        console.log(error)
    }
}

getStopInfo(627, info => {
  console.log('yep info is outside now', info)
})

【讨论】:

  • 感谢您的回复。我正在使用 mta-gtfs api。我试过你的代码。系统返回 Unexpected token new,这是第三行中的新令牌。我该怎么办?
  • 在我的示例中... mta 对象不是您将在代码中使用的对象... 这只是示例中的存根... 但是,在我的示例中,唯一使用'new' 关键字用于创建承诺但是,我认为您的 mta-gtfs api 已经向您返回了一个承诺......
  • 我刚刚查看了返回承诺的 npm mta-gtfs...所以这是一个我正在修改答案的示例...
  • 是的。 mta-gtfs 正在向我返回承诺,我可以看到它,但我无法访问数据和使用数据。我应该怎么做才能访问和使用 promise 之外的数据?感谢您重播。
  • 查看我的上一个版本,使用回调从异步函数中提取信息解析承诺,然后使用回调将结果输出。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 2019-07-13
相关资源
最近更新 更多