新手问一下关于Nodejs异步返回值的问题
新手问一下关于Nodejs异步返回值的问题
因为项目用到 puppeteer 库要写一点 Node.js 代码
大概是 endpoint 调用 logic 的 do
do 里需要用到 aboutPuppeteerMethod 的返回值
但是没等到 aboutPuppeteerMethod 执行完返回 sth 已经先执行了 next
我理解的 async 类似于 golang 的 go 关键字 但是似乎没有找到 channel 配套
想达到在 aboutPuppeteerMethod 增加一个 channel 阻塞等待返回值继续执行后面代码的效果
不知道该怎么写 原来没写过 js 轻喷
function Logic() {}
Logic.prototype.do = function (param) {
var sth = aboutPuppeteerMethod()
var ok = next(sth, param)
return ok
}
async function aboutPuppeteerMethod() {
....
await page.goto()
return sth
}
Logic.prototype.do = async function (param) {
var sth = await aboutPuppeteerMethod()
var ok = next(sth, param)
return ok
}
用 await 来阻塞等待 async
谢谢 我已经找到办法了 一开始我是这么写 但是外层 endpoint 没有这么写 所以 client 才获取不到返回值 感谢
你好,关于Node.js中的异步返回值问题,这是一个非常常见的疑问。Node.js是基于事件驱动和非阻塞I/O模型的,因此很多操作都是异步进行的。这就意味着你不能直接通过返回值来获取异步操作的结果,而需要使用回调函数、Promises或者async/await来处理。
下面我将通过代码展示这三种方法:
1. 回调函数
function asyncOperation(callback) {
setTimeout(() => {
callback(null, 'Result from async operation');
}, 1000);
}
asyncOperation((err, result) => {
if (err) {
console.error(err);
} else {
console.log(result);
}
});
2. Promises
function asyncOperation() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Result from async operation');
}, 1000);
});
}
asyncOperation().then(result => {
console.log(result);
}).catch(err => {
console.error(err);
});
3. async/await
function asyncOperation() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Result from async operation');
}, 1000);
});
}
async function main() {
try {
const result = await asyncOperation();
console.log(result);
} catch (err) {
console.error(err);
}
}
main();
希望这些示例能帮助你理解如何在Node.js中处理异步返回值。如果有其他问题,欢迎继续提问!