在下面的代碼段中,我希望能夠locationArray在請求函式之外訪問,我明白在下面的代碼中為什么它不起作用,但是,我嘗試了許多不同的方法來訪問陣列。我曾嘗試使用承諾、回呼函式等,但是,它們似乎都不起作用。
關于如何做到這一點的任何其他想法?即使對我嘗試過的方法持開放態度,因為此時一切都值得一試。
request(process.env.RESOURCE_SHEET, (error, response, html) => {
var locationArray = new Array
if(!error && response.statusCode == 200) {
const $ = cheerio.load(html);
$("h3").each((i, lle) => {
const location = $(lle).text();
if(location.includes("Kansas")) return;
if(location.includes("In Stock")) {
var level = location " ?";
} else {
var level = location " ?";
}
locationArray.push(level);
});
}
console.log(locationArray) // Output 1: [level1,level2,level3,leveletc]
});
console.log(locationArray) // Output 2: []
uj5u.com熱心網友回復:
@StackSlave 是對的,它只需要一個承諾,我相信當我第一次嘗試使用承諾解決它時,我搞砸了語法,但這似乎有效。
const promise = new Promise((resolve,reject) => {
request(process.env.RESOURCE_SHEET, (error, response, html) => {
var locationArray = new Array
if(!error && response.statusCode == 200) {
const $ = cheerio.load(html);
$("h3").each((i, lle) => {
const location = $(lle).text();
if(location.includes("Kansas")) return;
if(location.includes("In Stock")) {
var level = location " ?";
} else {
var level = location " ?";
}
locationArray.push(level);
resolve(locationArray);
});
}
console.log(locationArray) // Output 1: [level1,level2,level3,leveletc]
});
});
promise.then(array => {
console.log(array);
});
uj5u.com熱心網友回復:
人們不僅可以考慮基于Promise的方法,正如已經提出的那樣,而且還可以考慮代碼重構,將不同的關注點分離為任務,并將后者實作為可以饋送/傳遞到Promise鏈的函式。作為一個優勢,重構以人類可讀的代碼回報,這也可能更容易維護......
function createRequest(src) {
return new Promise((resolve, reject) => {
request(src, (error, response, html) => {
if (!error && response.statusCode === 200) {
resolve(html);
} else {
reject({ error, response });
}
});
};
}
function handleFailedRequest(reason) {
const { error, response } = reason;
// proceed with failure handling based on
// either request data `error` and/or `response`.
}
function createLocationArray(html) {
const locationArray = [];
const $ = cheerio.load(html);
$('h3').each((i, lle) => {
const location = $(lle).text();
if (!location.includes('Kansas')) {
const isInStock = location.includes('In Stock');
locationArray.push(
`${ location } ${ isInStock && '?' || '?' }`
);
}
});
return locationArray;
}
function processLocationArray(array) {
console.log('locationArray ... ', array);
}
const promisedResponse = createRequest(process.env.RESOURCE_SHEET);
promisedResponse
.then(createLocationArray)
.then(processLocationArray)
.catch(handleFailedRequest);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318794.html
標籤:javascript 异步 打回来 要求 es6-promise
上一篇:ReactNative異步存盤與UI不同步?我怎樣才能改變這種行為?
下一篇:異步方法中的型別不匹配
