首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何返回一个数组,从承诺使用在世博会/反应本地应用程序?

我如何返回一个数组,从承诺使用在世博会/反应本地应用程序?
EN

Stack Overflow用户
提问于 2022-02-23 15:38:23
回答 2查看 341关注 0票数 0

我正在尝试创建一个具有路由功能的应用程序,为此,我需要使用OpenRouteService。我所设定的方式是,我所设想的,在一个承诺中。

我无法将数组从承诺中提取出来,我尝试使用带有await的异步函数,但这似乎没有返回任何内容,我也不知道这个承诺是设置错了还是异步函数设置错了。

以下是承诺:

代码语言:javascript
复制
function getRoute() {
    var openrouteservice = require("openrouteservice-js");
    var Directions = new openrouteservice.Directions({ api_key: "######"});

    // Direction Request
    Directions.calculate({
        coordinates: [[8.690958, 49.404662], [8.687868, 49.390139]],
        profile: 'foot-walking',
        extra_info: ['waytype', 'steepness'],
        format: 'geojson'
    })
        .then(function(geojson) {
            // Add your own result handling here
            var PolyLine = geojson.features[0].geometry.coordinates.map(c => ({latitude: c[0], longitude: c[1]}))
            console.log(PolyLine);
            return PolyLine
        })
        .catch(function(err) {
            var str = "An error occurred: " + err;
            console.log(str);
        });
}

以下是我试图收集它的方法:

代码语言:javascript
复制
React.useEffect(() => {
        async function getPolyLine() {
            const res = await getRoute(); // type: Promise<Interface>
            console.log(res)
            setPolyLine(res);
        }

        getPolyLine();
    }, [])
    const [polyline, setPolyLine] = React.useState()

我没有使用Javascript或React的实际经验,而且承诺是一个很有趣的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-23 15:46:29

您需要添加如下返回语句:

代码语言:javascript
复制
function getRoute() {
    var openrouteservice = require("openrouteservice-js");
    var Directions = new openrouteservice.Directions({ api_key: "######"});

    // Direction Request
    return Directions.calculate({
        coordinates: [[8.690958, 49.404662], [8.687868, 49.390139]],
        profile: 'foot-walking',
        extra_info: ['waytype', 'steepness'],
        format: 'geojson'
    })
        .then(function(geojson) {
            // Add your own result handling here
            var PolyLine = geojson.features[0].geometry.coordinates.map(c => ({latitude: c[0], longitude: c[1]}))
            console.log(PolyLine);
            return PolyLine
        })
        .catch(function(err) {
            var str = "An error occurred: " + err;
            console.log(str);
        });
}

因此,在您的代码中,您实际上没有返回承诺。

票数 0
EN

Stack Overflow用户

发布于 2022-02-23 16:13:59

我认为在这里,我们必须创建我们的自定义承诺,并使用可能的值来解析它,以返回我们想要的语句的值。

在这里,我们不能像在JavaScript子句中尝试的那样,直接从内部函数返回语句。

试着做以下改变,希望它能解决你的问题:

代码语言:javascript
复制
function getRoute() {
    var openrouteservice = require("openrouteservice-js");
    var Directions = new openrouteservice.Directions({ api_key: "######"});

    return new Promise((resolve, reject) => {
        // Direction Request
        Directions.calculate({
            coordinates: [[8.690958, 49.404662], [8.687868, 49.390139]],
            profile: 'foot-walking',
            extra_info: ['waytype', 'steepness'],
            format: 'geojson'
        })
            .then(function(geojson) {
                // Add your own result handling here
                var PolyLine = geojson.features[0].geometry.coordinates.map(c => ({latitude: c[0], longitude: c[1]}))
                console.log(PolyLine);
                resolve(PolyLine)
            })
            .catch(function(err) {
                var str = "An error occurred: " + err;
                console.log(str);
                resolve([])
            });
    })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71239918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档