通过setImmediate使用异步等待

时间:2019-02-22 14:34:01

标签: node.js

我想知道如何在异步等待中使用setImmediate并正确处理错误。我写了下面的代码。但是我不确定它是否遵循最佳实践。

我的快速应用中有一条路线

router.get('/parseinvoice', async (req, res, next) => {
    try {
        const parsedInvoiceResponse = await userhelper.getParseInVoiceList();
        res.json({parsedInvoiceResponse})
    } catch (error) {
        res.json({});
    }
});

userhelper类代码

 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部分,是否需要多个 try catch 。有什么巧妙的方法可以编写以下代码?

3 个答案:

答案 0 :(得分:1)

try {
    setImmediate(async ()=>{
        var res = await readFile(filePath, 'UTF-8');
    })
} catch(err) {
}

2。

await setImmediate(()=>{
       var res = await readFile(filePath, 'UTF-8');
}).catch(){}

3。

try {
    await setImmediate(()=>{
       await readFile(filePath, 'UTF-8');
    }).catch(){}
} catch() {
}
  1. 应将结果返回到res
const res = await setImmediate(()=>{
     return readFile(filePath, 'UTF-8');
})

答案 1 :(得分:0)

为什么不只使用?

userhelper.getParseInVoiceList = async function() {
    return await readFile(filePath, 'UTF-8');
}

答案 2 :(得分:0)

扩展for i in range (0,10): if i==5: i = 3 print i 的答案,可以在调用异步承诺的@Dan D.之前await解决异步setImmediate的问题,但是我不确定为什么您在没有更多上下文的情况下就需要这样做。

readFile