Javascript 是否可以在不使用return关键字的情况下解析异步函数

Javascript 是否可以在不使用return关键字的情况下解析异步函数,javascript,asynchronous,async-await,ecmascript-2017,Javascript,Asynchronous,Async Await,Ecmascript 2017,我开始使用ES7功能async/await,它提供了处理异步任务的最佳方法,并使您的代码更清晰可读 但是,它不允许您访问由异步函数创建的Promise,因此,如果您在异步函数中执行某些异步请求,您应该提示它,然后等待它,然后返回结果。我的意思是: async function doStuff() { //stuff... var value = await new Promise(function(resolve) { $.get('http://some/url

我开始使用ES7功能
async/await
,它提供了处理异步任务的最佳方法,并使您的代码更清晰可读

但是,它不允许您访问由异步函数创建的Promise,因此,如果您在异步函数中执行某些异步请求,您应该提示它,然后等待它,然后返回结果。我的意思是:

async function doStuff() {
    //stuff...
    var value = await new Promise(function(resolve) {
        $.get('http://some/url/...', function(result) {
            // stuff...
            resolve(result);
        });
    });
    return value;
}
如果您可以找到一个指向函数创建的承诺的指针,那么您的代码将如下所示:

async function doStuff() {
    //stuff...
    var p = arguments.callee.promise;
    $.get('http://some/url/...', function(result) {
        // stuff...
        p.resolve(result);
    });
}
甚至:

async function doStuff() {
    //stuff...
    $.get('http://some/url/...', function(result) {
        // stuff...
        async.resolve(result);
    });
}
通过这种方式,您不需要直接访问API,因为API使您的代码完全专注于任务,而不需要任何额外的功能

是否可以在不使用return关键字的情况下解析异步函数

没有

无法获取对
异步函数的调用创建的承诺的引用,但实际上也不需要访问该承诺(顺便说一句,您不能
.resolve()
承诺,您实际上需要访问承诺的解析函数)

async
/
await
的全部要点就是要善用承诺和其他功能。其思想是,每个异步函数都返回一个承诺,并且您不必承诺任何事情(但如果您确实必须这样做,请单独做)——事实上,
$.get
确实返回一个(jQuery)承诺。那么就写吧

async function doStuff() {
    //stuff...
    var result = await $.get('http://some/url/...');
    // stuff...
    return someValue;
}
如果您确实有一个回调函数,请使用一个简单的

async function doStuff() {
    // stuff…
    return new Promise(function(resolve, reject) {
        $.get({
            url: 'http://some/url/...',
            success: resolve,
            error: reject
            // don't do other "stuff" in here
        });
    });
}

当您从一个函数返回一个承诺时,函数不需要是异步的,实际上这甚至是不好的,因为您正在创建两个承诺

function doStuff() {
    return new Promise(function(resolve, reject) {
        $.get('http://some/url/...', result => resolve(result));
    });
}

async function main() {
    const result = await doStuff();
}

创建异步函数,然后在调用它们时使用wait如何

  //define
  async promiseFunction(foo) {
    return otherPromiseFunction(foo);
  async promiseFunction2(foo) {
    return '10';
  }
  async promiseFunction3(foo) {
    return new Promise((resolve, reject) => {
      resolve('foo')
    })
  }
//invoke
  anotherPromiseFunction(bar).then(async foo => {
    const fooResult = await promiseFunction(foo);
    return fooResult; 
  })

我认为您忽略了
async
/
wait
的要点。您能否生成这样一个场景:只需执行
result=wait$.get(someUrl);doStuffWith(结果)
不够?这个提议的全部要点不是要处理回调。我只是想,如果你已经承诺了,为什么你需要再创造一个呢。下面的Bergi回答得很清楚-No.=)如果您碰巧路过这里查看您的古怪代码,请考虑以下问题:。