javascript - 没有异步代码的承诺示例?
问题描述
我试图了解承诺的机制。具体来说,我们可以将什么都传递给第一个参数(通常称为解析)。例如:
function getFoo(url){
return new Promise(function(resolve, reject) {
let httpRequest = new XMLHttpRequest();
httpRequest.open('GET', url);
httpRequest.onload = function(){
if(httpRequest ===200) {resolve(httpRequest.responseText);
} else{ reject(Error(httpRequest.status));}
}
httpRequest.send();
});
}
我正在尝试构建自己的函数,该函数可以从 Promise 中受益(所有示例都使用 setTimeout 或 ajax 代码)。任何人都可以提供一个使用 promise 的常规函数的简单示例(即使在这种情况下不需要该机制),以便我可以构建自己的函数来将某些内容传递给解析回调?谢谢
例如:
function getFoo(param){
return new Promise(function(resolve, reject) {
????myFoo () { ...return...}
resolve(myFoo);
} else{ reject(???);}
}
});
}
解决方案
我们可以将什么都传递给第一个参数(通常称为解析)
resolve 只接受一个参数,但您可以向参数传递任何内容,它可以是数组、对象、函数……基本上是 javascript 支持的任何数据类型。
下面是一个简单的 Promise 示例。
PS 注意:只有当你调用 then 函数时才会调用 promise 对象,并且它是 then 函数接受回调以进行解析并拒绝。
function callPromise() {
return new Promise(function(resolve, reject) {
// do a thing, possibly async, then…
if (true) {
resolve("Stuff worked!");
}
else {
reject(Error("It broke"));
}
});
}
callPromise().then(function(success){
console.log(success);
}, function(error)
{
console.log(error);
})
推荐阅读
- ruby-on-rails - Bootstrap 未在 Rails 应用程序中加载所有样式
- python - 在图形执行中使用“sample_weight”不兼容的形状
- amazon-web-services - Spring Boot 和 AWS RDS 只读副本
- css - 键盘感知滚动视图占用屏幕空间
- android - 为什么 Android 应用程序 - 当应用程序从 Android Studio 停止时重新启动?
- rust - 包装 AsyncRead
- python - 有没有办法像 c# 一样在 python 中清除控制台?
- oracle - Oracle - 如何根据作为唯一索引一部分的 MAX 生效日期更新唯一行
- python - 如何在硒中订购明智的点击元素
- clojurescript - 在 Datascript 中,如何从另一个值创建新属性?