let func = function(){ reuturn new Promise( async (resolve, reject) => { await p1(); }) } 像这种写法,把async写在这里是否合适?
p1 完了resolve不就好了,或者里面没有其他异步的话直接resolve(p1()),,你这个是什么写法。。
@ganshiqingyuan 就是想在promise内用await,可能要await多个
@ganshiqingyuan let func = async function(){ try{ await p1(); await p2(); await p3(); return …; }catch(err){ 这里的报错如何被调用者捕获? 比如:return Promise.reject();??? } }
方式一: let func1 = async function(){ try { let a = await p1; let b = await p2; return Promise.resolve(); } catch (error) { return Promise.reject(); } } 方式二: let func2 = function(){ return new Promise(async (resolve, reject) => { try { let a = await p1; let b = await p2; resolve(); } catch (err) { reject(); } }) } 以上两种写法呢?是否合理?
await多个用 promise.all ,不是你这样写的
@phpsmarter 我需要方法的串行。然后需要将上面比如func2的结果返回出去给调用者,调用者也可以用await来获取结果
async function throwError() { 1+1n; }
let func = async function(){
try{
await throwError();
return 123;
}catch(err){
throw err; // 直接丢出去
}
}
// 在普通函数中捕获
func().catch(e =>console.log(`catch ${e}`)); // catch TypeError: Cannot mix BigInt and other types, use explicit conversions
// 在async中捕获
(async() => {
try {
await func();
} catch (e) {
console.log(`catch ${e}`); // catch TypeError: Cannot mix BigInt and other types, use explicit conversions
}
})()
const compose = (...functions) => input => functions.reduceRight((chain, func) => chain.then(func), Promise.resolve(input))
compose(insertDataWaitForData, getArray, getDataFromMediumWaitForUrl)(input)
//上面的方法就是传入Medium网站url,从返回数据获得数组,然后插入数据库. 都是异步操作.
异步操作compos方法 ,里面的reduceRight是Ramda库的方法,Ramda库里应该还有直接拿来用的函数.