我的代碼(Node.js)遇到了一點問題。我想有兩個檔案app.js和state.js,我基本上創建了這兩個檔案來嘗試解決我遇到的問題。
在第二個檔案 "State.js "中,我有一個回傳物件的函式,并將回傳時間推遲了10秒(因為網路速度慢等原因)。我正試圖在app.js檔案中檢索該物件。我試著使用承諾(async & await),但在終端上回傳了一個錯誤,我也試著運行一個setInterval來監控我在檢索物件時使用的變數,只在它有資料時執行,但這也不起作用。請盡快為我提供幫助。
下面是這兩個場景的代碼示例。
=========================== state.js檔案=======================
function test(val){
setTimeout(() =>{
return {
code: 0,
value: val
}
}, 10000)。)
}
module.exports = test;
========================== app.js檔案(使用承諾方法)============================
async function runNow(){
let v = await t('some string')。
console.log(v.value)
}
runNow()。
================================== app.js(使用區間法)==========
function runNow(){
let engine = setInterval(() => {
let v = t('some string')。
if(v ==null || v ==undefined){
console.log(v)。
}else{
clearInterval(引擎)。
console.log(v.value)。
}
}, 5000)。)
// console.log(v.value);.
}
runNow()。
uj5u.com熱心網友回復:
你必須使用promise或callback來完成你在這里想要做的事情。
如果我從callback fucntion的setTimeout(callback, time)中回傳一些東西,它實際上并沒有被setTimeout funciton回傳。
setTimeout的實作可能類似于這樣。
function setTimeout(callback, time, ...args){
//在給定的時間后,執行回呼。
callback(...args)。
}
你所期望的state.js檔案的實作將如下:
。function testWithPromise(val) {
return new Promise((resolve) => /span> {
setTimeout(() => {
resolve({
code: 0,
value: val,
});
}, 5000)。)
});
}
function testWithCallback(val, callback) {
setTimeout(() => {
callback({
code: 0,
value: val,
});
}, 3000)。)
}
//匯出函式 //匯出函式
//在其他模塊中使用它。
testWithCallback("callback_approach", console.log) 。
testWithPromise("promise_approach").then(console.log) 。
//或用一個異步函式。
async function getValue(){
const value = await testWithPromise("async_promise")。
console.log(value)。
}
//getValue();
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
uj5u.com熱心網友回復:
你需要創建一個承諾,以便讓await等待它
嘗試:
function test(val){
return new Promise((resolve, reject) => /span>{
setTimeout(() => {
resolve({code: 0, value: val})。)
}, 10000)。)
});
}
async function runNow() {
let v = await test('someString')。
console.log(v.value)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331520.html
標籤:
