Javascript 从更高范围内的承诺中获取的返回值

Javascript 从更高范围内的承诺中获取的返回值,javascript,vue.js,Javascript,Vue.js,我想要一个返回名称的简单函数,下面是代码: getName(entity, id) { const promise = userServices.getName(entity, id).then((data) => { return data; }); //I want to return 'data' value here } 我使用的是vue,我知道

我想要一个返回名称的简单函数,下面是代码:

        getName(entity, id) {
            const promise = userServices.getName(entity, id).then((data) => {
                return data;
            });
            //I want to return 'data' value here
        }

我使用的是vue,我知道我可以生成另一个
data()变量
,但我不想将其用于单个函数。还有其他简单的方法吗?我是否可以在函数中创建一个
变量
,该变量可以在promise中访问?

您试图做的是不可能的。您无法将异步数据转换为同步代码,这就是承诺存在的原因

基本上有两种选择:

  • 异步/等待

    async getName(entity, id) {
        await data = userServices.getName(entity, id);
        return data;
    };
    
  • 这是可行的,但请记住,异步函数在幕后返回承诺,因此操作仍然是异步的。这意味着当您在主代码中调用
    getName
    时,它将进入事件循环,并且仅在主代码完成时执行

  • 还债

    getName(entity, id) {
        return userServices.getName(entity, id);
    }
    

  • 然后,您可以将
    。然后
    链接到函数外部,即在主代码范围内,这样您就可以使用在主代码范围内使用该返回值找到的变量/调用函数/更新状态。但是,它仍然是一个
    。然后,
    承诺子句-意味着该值不会在所有主代码范围内都可用,而只能在
    内使用。然后,
    再次,它仍然是一个异步操作。

    您尝试执行的操作是不可能的。您无法将异步数据转换为同步代码,这就是承诺存在的原因

    基本上有两种选择:

  • 异步/等待

    async getName(entity, id) {
        await data = userServices.getName(entity, id);
        return data;
    };
    
  • 这是可行的,但请记住,异步函数在幕后返回承诺,因此操作仍然是异步的。这意味着当您在主代码中调用
    getName
    时,它将进入事件循环,并且仅在主代码完成时执行

  • 还债

    getName(entity, id) {
        return userServices.getName(entity, id);
    }
    

  • 然后,您可以将
    。然后
    链接到函数外部,即在主代码范围内,这样您就可以使用在主代码范围内使用该返回值找到的变量/调用函数/更新状态。但是,它仍然是一个
    。然后是一个承诺的
    子句-意味着该值不会在所有主代码范围内都可用,而只能在
    内使用。然后,它仍然是一个异步操作。

    没有办法做到这一点,您只能返回解析此数据的承诺,因为getName函数内部的操作是异步的,除非您像稍后将更新的对象一样返回(这很可能不是您想要的,因为无法保证在访问它之前将值写入其中)
    返回稍后更新的对象
    -字面上是承诺的定义@KrzysztofKrzeszewskiyes确切地说,这就是承诺,但是在这种情况下,他可以使用非承诺语法,这在某些特定情况下可能需要cases@KrzysztofKrzeszewski我有点不同意。。。你能给我举个例子吗?如果承诺帮不上忙,那就需要什么?有太多的promise实现和库,包括原生promises库中的大量实用程序,我发现很难想象这样的场景:实现您自己的promise-like逻辑会更好…没有办法做到这一点,您只能返回解析此数据的承诺,因为getName函数内部的操作是异步的,除非您像稍后将更新的对象一样返回(这很可能不是您想要的,因为无法保证在访问它之前将值写入其中)
    返回稍后更新的对象
    -字面上是承诺的定义@KrzysztofKrzeszewskiyes确切地说,这就是承诺,但是在这种情况下,他可以使用非承诺语法,这在某些特定情况下可能需要cases@KrzysztofKrzeszewski我有点不同意。。。你能给我举个例子吗?如果承诺帮不上忙,那就需要什么?有太多的承诺实现和库,包括本机承诺库中的大量实用程序,我发现很难想象实现自己的承诺逻辑会更好。。。