是否可以在没有 return 关键字的情况下解析异步函数
Is it possible to resolve async function without return keyword
我开始使用 ES7 功能 async/await
,它提供了处理异步任务的最佳方法,并使您的代码更清晰和可读。
但是它不会让您访问由异步函数创建的 Promise,因此如果您在异步函数中执行一些异步请求,您应该对其进行 promisify,然后等待它,然后 return 结果.我的意思是:
async function doStuff() {
//stuff...
var value = await new Promise(function(resolve) {
$.get('http://some/url/...', function(result) {
// stuff...
resolve(result);
});
});
return value;
}
如果您能找到一个指向由函数创建的 Promise 的指针,那么您的代码将如下所示:
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);
});
}
这样你就不需要直接访问 Promises API 是什么让你的代码完全专注于任务而没有任何其他。
Is it possible to resolve async function without return keyword
没有
无法获得对 async function
调用创建的承诺的引用,但实际上也没有必要访问它(顺便说一句,你不能 .resolve()
promise,您实际上需要访问 promise 的解析函数)。
async
/await
的重点是善待 promise 和其他 thenables。这个想法是 每个 异步函数 return 都是一个承诺,你不必承诺任何东西(但如果你真的必须,单独做) - 并且在事实上,$.get
确实 return (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
});
});
}
当你从函数返回一个 promise 时,函数不需要异步,实际上它甚至更糟糕,因为你正在创建两个 promise!
function doStuff() {
return new Promise(function(resolve, reject) {
$.get('http://some/url/...', result => resolve(result));
});
}
async function main() {
const result = await doStuff();
}
如何创建异步函数,然后在调用它们时使用 await。
//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;
})
我开始使用 ES7 功能 async/await
,它提供了处理异步任务的最佳方法,并使您的代码更清晰和可读。
但是它不会让您访问由异步函数创建的 Promise,因此如果您在异步函数中执行一些异步请求,您应该对其进行 promisify,然后等待它,然后 return 结果.我的意思是:
async function doStuff() {
//stuff...
var value = await new Promise(function(resolve) {
$.get('http://some/url/...', function(result) {
// stuff...
resolve(result);
});
});
return value;
}
如果您能找到一个指向由函数创建的 Promise 的指针,那么您的代码将如下所示:
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);
});
}
这样你就不需要直接访问 Promises API 是什么让你的代码完全专注于任务而没有任何其他。
Is it possible to resolve async function without return keyword
没有
无法获得对 async function
调用创建的承诺的引用,但实际上也没有必要访问它(顺便说一句,你不能 .resolve()
promise,您实际上需要访问 promise 的解析函数)。
async
/await
的重点是善待 promise 和其他 thenables。这个想法是 每个 异步函数 return 都是一个承诺,你不必承诺任何东西(但如果你真的必须,单独做) - 并且在事实上,$.get
确实 return (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
});
});
}
当你从函数返回一个 promise 时,函数不需要异步,实际上它甚至更糟糕,因为你正在创建两个 promise!
function doStuff() {
return new Promise(function(resolve, reject) {
$.get('http://some/url/...', result => resolve(result));
});
}
async function main() {
const result = await doStuff();
}
如何创建异步函数,然后在调用它们时使用 await。
//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;
})