2017-06-06 26 views
0

未解決の約束があります。Node.jsの未解決の約束問題

私はこの機能を持っている:

私は、この関数から呼び出してい
export async function readData(dir) { 
await fs.readFile(dir, `utf-8`, (err, data) => { 
    if (err) throw err 
    console.log("data1:", data) 
    return data 
}) 
} 

app.get('/server/survey', (ctx) => { 
let dir = path.join(__dirname, 'src/DB/index.json') 
let data = funcs.readData(dir) 
data.then((result) => { 
    console.log("Content:", result) 
    ctx.body = `${result}` 
}) 

最初のものは、正しくデータが、2番目のログアウトの未解決の約束をログアウトします。

答えて

0

fs.readFile()約束が返ってこないので、awaitは表示されません。

手動約束でそれをラップする必要があります:ノードV8のutil.promisify使用して、インスタンスのために、

export function readData(dir) { 
    return new Promise((resolve, reject) => { 
    fs.readFile(dir, `utf-8`, (err, data) => { 
     if (err) return reject(err); 
     console.log("data1:", data); 
     return resolve(data); 
    }) 
    }); 
} 

またはfs.readFileをpromisify:代わりにノードV8を使用しての

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

async function readData(dir) { 
    let data = await readFile(dir, `utf-8`); 
    console.log("data1:", data) 
    return data; 
} 

を、あなたも使用することができますpromisificationを提供するbluebirdのようなライブラリ。

awaitの例では、コールバックがもう使用されていないことに注意してください。

+0

ありがとうございました。それを試してください。上記の手動の約束のアプローチに行きました。どうも! – Fedreg

+0

@Fedreg私は['pify'](https://github.com/sindresorhus/pify)ということを忘れていました。コールバックベースの関数を約束する素敵な小さなlibです:) – robertklep

+0

私はそれを見ていきます。再度、感謝します! – Fedreg

関連する問題