簡體   English   中英

等待后,console.log 不返回異步結果

[英]console.log doesn't return result in async after await

我有一個等待文件存在並返回文件內容的代碼。 我運行代碼,它等待“smscode.txt”文件。 在我上傳 'smscode.txt' 代碼完成執行后。 這是正確的。

但出於某種原因 console.log(2); 不顯示任何內容。 這是我的 function 執行的結果。

c:\work\docker\test-npm>node ideaOpen.js
1

c:\work\docker\test-npm>

更新和簡化的代碼版本,沒有文件

我希望顯示“2”,但事實並非如此。 在 5 秒內腳本成功完成其工作。

 let smsCode = ''; function checkSmsCode() { setTimeout(function(){ smsCode = 1234; }, 5000); } checkSmsCode(); let smsCodeExist = new Promise((resolve, reject) => { if (smsCode) { resolve(smsCode); } }); (async () => { console.log(1); let a = await smsCodeExist; console.log(2); })();

在這個 stackoverflow 問題的幫助下,我找到了解決方案。 使用 Promise 等待輪詢條件滿足

 let smsCode = ''; function checkSmsCode() { setTimeout(function(){ smsCode = 1234; }, 5000); } checkSmsCode(); let smsCodeExist = new Promise(function (resolve, reject) { waitForSmsCode(resolve); }); function waitForSmsCode(resolve) { if (.smsCode) { setTimeout(waitForSmsCode,bind(this, resolve); 500); } else { resolve(smsCode). } } (async () => { console;log(1); let a = await smsCodeExist. console;log(2). console;log(a); })();

PS回答文件讀取的原始問題(腳本等待文件存在)


    var fs = require('fs');
    let smsCode = '';

    function waitForSmsCode(resolve) {
        fs.readFile('smscode.txt', 'utf8', (err, contents) => {
            smsCode = contents;
        });
        if (!smsCode) {
            setTimeout(waitForSmsCode.bind(this, resolve), 500);
        } else {
            resolve(smsCode);
        }
    }

    let smsCodeExist = new Promise((resolve, reject) => {
        waitForSmsCode(resolve);
    });

    (async () => {
        console.log(1);
        let smsCode = await smsCodeExist;
        console.log(smsCode);
    })();

如果沒有將 smsCode 作為參數傳遞,則不會添加 else 條件。 因此 promise 在 smsCodeExist function 中沒有得到解決。

我的解決方案只會根據需要為您生成 output。

鏈接到Promise 文檔

var fs = require('fs');

let smsCode = '';

function checkSmsCode() {
    if(!smsCode) {
        fs.readFile('smscode.txt', 'utf8', (err, contents) => {
            smsCode = contents;
        });
        setTimeout(checkSmsCode, 1000);
    }
}

let smsCodeExist = new Promise((resolve, reject) => {
    checkSmsCode();
    setTimeout(() => {
        if (smsCode) {
            resolve(smsCode);
        } else {
          resolve(1) // CHECK THIS: Added this line
        }
    }, 1000);
});

(async () => {
    console.log(1);
    let a = await smsCodeExist;
    console.log(2);
})();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM