停止并执行承诺 javascript
stop and execute a promise javacript
如何使用 Javascript 同步执行 HTTP 请求并将结果存储在本地对象中?
给定以下 javascript 模块:
var Promise = require("promise");
function myReq(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = 'json';
xhr.onload = () => {
if (xhr.status >= 400){
console.log("got rejected");
reject({status: xhr.status, statusText: xhr.statusText});
} else {
console.log("resolved");
resolve({data: xhr.response});
}
};
xhr.onerror = () => {
console.log("Error was called");
reject({status: xhr.status, statusText: xhr.statusText});
};
xhr.send();
});
}
export default myReq;
我希望此请求中的 json 对象存储在另一个脚本的局部变量中。但是,当我尝试此代码时,它会异步运行。
1. import myReq from '../../lib/myReq';
2. const urlTest = "localhost://3000:/somepath";
3. const test = myReq(urlTest).then((a) => {console.log(a); return a;}).catch((b) => console.log(b));
4. console.log(test.data);
我想让它停在第3行,执行代码,把javascript对象存入test,然后继续执行剩下的代码。现在 test 是一个 Promise 并且 test.data 是未定义的。
myReq
returns 一个承诺,不仅仅是数据!这就是为什么你需要使用 then
& catch
块,或者使用 await
.
// myReq function returns a Promise, NOT a value! (Not returning 5!)
function myReq(url) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(5);
}, 5000);
});
}
// Option 1
myReq('someurl').then((data) => {
console.log('data (option 1)', data); // You can use the data here, inside the 'then' block
}).catch((error) => {
console.log('error', error);
});
// Option 2
const run = async () => {
try {
const data = await myReq('someurl'); // await must be called from an 'async' function
console.log('data (option 2)', data); // You can use the data here, inside the 'try' block
} catch (error) {
console.log('error', error);
}
};
run();
如果您想将其转换为同步流程,您可以直接使用 async/await
来处理该流程,而不是直接转到下一步。就像你可以做这样的事情:
try {
const result = await myReq(url);
} catch (e) {
// Handle error generated in the process
}
记住你只能成对 async/await
意味着只有在 async
函数中你可以使用 await
关键字。欲了解更多详情,请访问此 article
希望这对您有所帮助。祝你有个美好的一天。
如何使用 Javascript 同步执行 HTTP 请求并将结果存储在本地对象中?
给定以下 javascript 模块:
var Promise = require("promise");
function myReq(url) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.responseType = 'json';
xhr.onload = () => {
if (xhr.status >= 400){
console.log("got rejected");
reject({status: xhr.status, statusText: xhr.statusText});
} else {
console.log("resolved");
resolve({data: xhr.response});
}
};
xhr.onerror = () => {
console.log("Error was called");
reject({status: xhr.status, statusText: xhr.statusText});
};
xhr.send();
});
}
export default myReq;
我希望此请求中的 json 对象存储在另一个脚本的局部变量中。但是,当我尝试此代码时,它会异步运行。
1. import myReq from '../../lib/myReq';
2. const urlTest = "localhost://3000:/somepath";
3. const test = myReq(urlTest).then((a) => {console.log(a); return a;}).catch((b) => console.log(b));
4. console.log(test.data);
我想让它停在第3行,执行代码,把javascript对象存入test,然后继续执行剩下的代码。现在 test 是一个 Promise 并且 test.data 是未定义的。
myReq
returns 一个承诺,不仅仅是数据!这就是为什么你需要使用 then
& catch
块,或者使用 await
.
// myReq function returns a Promise, NOT a value! (Not returning 5!)
function myReq(url) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(5);
}, 5000);
});
}
// Option 1
myReq('someurl').then((data) => {
console.log('data (option 1)', data); // You can use the data here, inside the 'then' block
}).catch((error) => {
console.log('error', error);
});
// Option 2
const run = async () => {
try {
const data = await myReq('someurl'); // await must be called from an 'async' function
console.log('data (option 2)', data); // You can use the data here, inside the 'try' block
} catch (error) {
console.log('error', error);
}
};
run();
如果您想将其转换为同步流程,您可以直接使用 async/await
来处理该流程,而不是直接转到下一步。就像你可以做这样的事情:
try {
const result = await myReq(url);
} catch (e) {
// Handle error generated in the process
}
记住你只能成对 async/await
意味着只有在 async
函数中你可以使用 await
关键字。欲了解更多详情,请访问此 article
希望这对您有所帮助。祝你有个美好的一天。