我怎樣才能同步運行這個 if 陳述句。我已經嘗試了很多次,但無法解決這個問題。(我是 nodejs 初學者)。我正在嘗試在這里使用 async/await,但它不起作用。我如何先檢查條件是否完成,然后再檢查是否運行第二個 if 陳述句!請幫忙。這是我的虛擬代碼:
record1='10';
record2='20';
function main(){
if(record1){
console.log('-------------------------');
console.log('I am record 1')
val='John',
firstJob(val)
}
if(record2){
console.log('I am record 2')
val='Rahul',
firstJob(val)
}
}
async function firstJob(val){
console.log('Hello, I am ' val)
await secondJob(val);
}
async function secondJob(val){
console.log(val ' is a nodeJs beginner!')
await listFiles()
}
function thirdJob(arg){
if (arg='pass'){
console.log('This is end of the one if condition')
}
}
function listFiles (){
return new Promise((resolve, reject) => {
setTimeout(() => {
const path = require('path');
const fs = require('fs');
const { exit } = require('process');
const directoryPath = path.join(__dirname, '../');
console.log('List of Avaialble Files :');
fs.readdir(directoryPath, { withFileTypes: true },function (err, files) {
if (err) {
return console.log('Unable to scan directory: ' err);
}
files.forEach(function (file) {
if (file.isFile()){
console.log(file);
}
});
});
arg='pass'
thirdJob();
}, 2000)
})
}
main();
uj5u.com熱心網友回復:
簡短的回答是你不能“讓它們同步運行”。您必須耐心等待他們完成才能獲得答案。
所以,不用 make main async,你必須以老式的方式使用 promise,并使用then.
record1='10';
record2='20';
function main(){
Promise.resolve()
.then(() => {
if(record1){
console.log('-------------------------');
console.log('I am record 1');
val='John';
return firstJob(val)
}
})
.then(() => {
if(record2){
console.log('I am record 2')
val='Rahul';
return firstJob(val)
}
});
}
async function firstJob(val){
console.log('Hello, I am ' val)
await secondJob(val);
}
async function secondJob(val){
console.log(val ' is a nodeJs beginner!')
await listFiles()
}
main();
我剛剛包含了 theif和 promise 的代碼片段。這里的要點是您有條件地將對firstJob.
每次呼叫都then允許您(可能不是必需的)將另一個承諾附加到剛剛完成的承諾的執行中。在上面的代碼片段中,我們只有在條件為真時才這樣做,方法是將呼叫中的承諾回傳給 firstJob。
順便說一句,你的實作listFiles永遠不會完成,因為你永遠不會呼叫resolve你在函式中做出的承諾。這通過在回圈完成后解決您的承諾來解決問題。
function listFiles (){
return new Promise((resolve, reject) => {
setTimeout(() => {
const path = require('path');
const fs = require('fs');
const { exit } = require('process');
const directoryPath = path.join(__dirname, '../');
console.log('List of Avaialble Files :');
fs.readdir(directoryPath, { withFileTypes: true },function (err, files) {
if (err) {
console.log('Unable to scan directory: ' err);
reject(err);
}
files.forEach(function (file) {
if (file.isFile()){
console.log(file);
}
});
resolve();
});
arg='pass'
thirdJob();
}, 2000)
})
}
resolve完成回圈后,請注意添加的呼叫。reject在回傳錯誤的情況下,我還添加了一個呼叫readdir,因為這是通過手動承諾傳播它的正確方法。
更多的指標,通常在檔案頂部需要模塊一次,而不是在函式內部動態。這樣做的懲罰還不錯,所需模塊有快取。這不是慣用的。
if (arg='pass'){
不做任何相等性檢查,這是一個賦值,你需要==,或者===如果你想檢查相等性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/486001.html
標籤:节点.js
