Nodejs 新手,请问怎么在一个函数里等 promise 执行了 resolve() 之后才返回呢
Nodejs 新手,请问怎么在一个函数里等 promise 执行了 resolve() 之后才返回呢
null
直接返回 promise
es7 async await
这不就是同步执行么?
还用什么 Promise ?
callback, promise, rx, async/await 任君选择
好像只能回调,或者看下是否已支持 await
正在练手 koa ,用了 npm 里一个 google translate 的包,它返回的就是一个 promise ,我想把这个 promise 的结果传给 koa 路由,然后就不知道了。。。
promise 不是有 then 么,把后续逻辑写在 then 里边不就好了, poorman’s await 。
路由就是 async 的,或者如果是 koa 1 那么就是 generator ,都支持异步。
给你个例子吧:
比如这个 controller :
koa1: js<br>a: function() * {<br> const result = yield fetchTranslate();<br><br> this.data = result;<br>}<br>
koa 2:js<br>async a(ctx, next) {<br> const result = await fetchTranslate();<br><br> ctx.data = result;<br>}<br>
没测试,可能有语法错误,大概就是这么个意思。
function fn() {
return new Promise((resolve, reject) => {
// do something
resolve()
})
}
异步是会传染的,最好 async 其次 co+generator ,或者把这个函数也 promise 化返回,最次 callback
非常感谢,你的代码解决了我的问题。可是我还是没有弄懂 koa 为什么会自动执行 promise 里的 resolve(),希望能帮帮我,谢谢
因为 async 会创建一个异步函数,这时候如果在 promise 前加上 await 那么就会等待这个 promise 完成再继续执行。
generator 同理。不过 generator 先出现,但是因为 async/await 是 ES7 的东西,所以大家都跳过 generator 直接用上了 async/await.
这两个概念理解起来可能有点费劲,具体你可以找一些文章来学习一下 async/await 和 generator 。比如 https://ponyfoo.com/articles/understanding-javascript-async-await
函数里不能等 promise resolve 之后再返回,但是可以在 resolve 执行之前返回这个 promise 对象,让调用这个函数的程序拿到返回的 promise 再调用其 then 等方法拿到回调函数。javascript<br>function f() { <br> return new Promise((resolve, reject) => { <br> // 做其他事<br> resolve();<br> }) ;<br>}<br><br>let thePromise=f();// 这一句是执行 f 函数,返回了一个 Promise 对象,复制给 thePromise 变量<br>thePromise.then(function(){<br> // 这里就是在 f 函数的 resolve 执行完之后才执行的程序。<br>});<br>
作为Node.js新手,理解如何等待Promise执行完成并获取其结果是非常重要的。在JavaScript中,你可以使用async
和await
关键字来优雅地处理异步操作。
以下是一个简单的示例,展示如何在函数内部等待Promise执行完成后再返回结果:
// 定义一个返回Promise的函数
function asyncOperation() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("操作完成!");
}, 2000); // 模拟2秒的异步操作
});
}
// 使用async和await来等待Promise完成
async function waitForAsyncOperation() {
try {
const result = await asyncOperation(); // 等待Promise完成
return result; // 返回Promise的结果
} catch (error) {
console.error("发生错误:", error);
}
}
// 调用函数并处理结果
waitForAsyncOperation().then(result => {
console.log(result); // 输出: 操作完成!
});
在这个例子中,asyncOperation
函数返回一个在2秒后解决的Promise。waitForAsyncOperation
函数使用async
关键字标记为异步函数,并使用await
关键字等待asyncOperation
的结果。这样,waitForAsyncOperation
函数会在Promise解决后才返回结果。
async
和await
使得异步代码看起来更像是同步代码,从而使代码更易于理解和维护。记住,await
只能在async
函数内部使用。