首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在setImmediate中使用异步等待

在setImmediate中使用异步等待
EN

Stack Overflow用户
提问于 2019-02-22 14:34:01
回答 3查看 4.5K关注 0票数 6

我想知道如何使用setImmediate与异步等待和正确处理错误。我写了下面的代码。但我不确定它是否坚持最佳做法。

我的特快应用有一条路线

代码语言:javascript
复制
router.get('/parseinvoice', async (req, res, next) => {
    try {
        const parsedInvoiceResponse = await userhelper.getParseInVoiceList();
        res.json({parsedInvoiceResponse})
    } catch (error) {
        res.json({});
    }
});

userhelper类代码

代码语言:javascript
复制
 var userhelper = {};
const fs = require('fs'),
      path = require('path'),    
      filePath = path.join(__dirname, './input_user_story_12.txt');

const { promisify } = require('util')
const readFile = promisify(fs.readFile);



userhelper.getParseInVoiceList = async function() {
    return new Promise( async (resolve, reject) => {
        try {
            setImmediate(async function() {
                try {
                    const contents = await readFile(filePath, 'UTF-8');
                    resolve(contents);
                } catch (error) {
                    reject(error);
                }
            });
        } catch (error) {
           reject(error); 
        }
    });
}


module.exports = userhelper;

虽然我得到了回应。对于setImmediate part,我不确定是否需要多次try catch。有什么简洁的方法来编写下面的代码吗?

EN

回答 3

Stack Overflow用户

发布于 2019-12-12 00:56:48

代码语言:javascript
复制
try {
    setImmediate(async ()=>{
        var res = await readFile(filePath, 'UTF-8');
    })
} catch(err) {
}

2.

代码语言:javascript
复制
await setImmediate(()=>{
       var res = await readFile(filePath, 'UTF-8');
}).catch(){}

3.

代码语言:javascript
复制
try {
    await setImmediate(()=>{
       await readFile(filePath, 'UTF-8');
    }).catch(){}
} catch() {
}
  1. 应该将结果返回给res
代码语言:javascript
复制
const res = await setImmediate(()=>{
     return readFile(filePath, 'UTF-8');
})
票数 2
EN

Stack Overflow用户

发布于 2019-02-22 15:10:45

你为什么不只是吸毒?

代码语言:javascript
复制
userhelper.getParseInVoiceList = async function() {
    return await readFile(filePath, 'UTF-8');
}
票数 0
EN

Stack Overflow用户

发布于 2020-01-07 23:20:34

扩展@Dan D.的答案,您可以在调用异步PromisifiedreadFile之前先解析异步setImmediate,但我不知道为什么需要在没有更多上下文的情况下这样做。

代码语言:javascript
复制
userhelper.getParseInVoiceList = async function() {
    await new Promise((resolve) => setImmediate(() => resolve()));
    return await readFile(filePath, 'UTF-8');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54829367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档