[英]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.