- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在处理 promise 时遇到了一些错误。所以最初我的功能是这样设置的,一切正常,没有问题。
原文:
const request = require("request-promise");
async () => {
const URL_HIDDEN = "...";
let info = await request(URL_HIDDEN);
info = JSON.parse(info).response.players[0];
let playtime = await request(URL_HIDDEN);
playtime = JSON.parse(playtime).response.games;
console.log(info);
console.log(playtime);
}
这是一个简化版本,但基本上我只是从 Steam API 请求信息。这两个变量都可以打印出所有数据,没问题,但是一旦我进行了下面的重构,情况就会发生变化。
重构:
const middleware = require("../middleware");
async () => {
const URL_HIDDEN = "...";
let requests = middleware.requestURI(URL_HIDDEN);
console.log(requests);
}
然后我开始在单独的文件中的单独函数中处理所有请求。
const request = require("request-promise");
middlewareObj.requestURI = async (URL_HIDDEN) => {
console.log("1");
let info = await request(URL_HIDDEN);
info = JSON.parse(info).response.players[0];
console.log("2");
let playtime = await request(URL_HIDDEN);
playtime = JSON.parse(playtime).response.games;
console.log("3");
return [{ info }, { playtime }];
};
整理好所有变量后,我想返回一个数组。但是,一旦执行,我就会将其打印到控制台。
1
Promise { <pending> }
2
3
知道为什么它在我重构后打印 promise pending 吗?
在原版中,它打印出一切都很好
最佳答案
在你的“重构”代码中 -
let requests = middleware.requestURI(URL_HIDDEN);
如果没有 await
,requests
将是一个未决的 promise - 所以,您需要
let requests = await middleware.requestURI(URL_HIDDEN);
对此进行扩展。任何标记为 async
的函数都会返回一个 Promise。
async function foo() {
return true;
}
这样调用
let bar = foo();
// here bar = pending promise of foo()
结果 bar 是 Promise
像这样调用它
let bar = await foo();
// here bar == true
有点等同于(但远不等同于)
foo().then(bar => {
// here bar == true
})
async/await
可以让已经被 Promise 简化的代码变得更简单——在这个人为的例子中,它并不明显
关于javascript - 异步/等待 promise 未决错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45608525/
我知道未决 Intent 的概念,但标志令人困惑。 连android文档都很难看懂 有人可以通过示例提供未决 Intent 标志的解释,特别是 FLAG_ONE_SHOT 和 FLAG_NO_CREA
试图显示来自 json 的数据。 当我在控制台上运行我的函数时,它显示: Promise {} 和 [[PromiseState]]:“已完成” 但实际上并没有返回任何东西。 getJobs = as
我的代码是这样的,点击按钮我执行 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMil
function f () { return new Promise(function (resolve, reject) { resolve(4); }) } fun
我有两个 Activity A 和 B。A 在应用程序启动时启动。我有一个从 A 启动的服务。 这是我在 Activity A 中的代码。 Button btnStart = (Button) fin
我正在开发一个应用程序,我想在其中设置自定义闹钟。但是在设置闹钟时间后没有任何反应。我正在分享我的代码。如果我的代码中缺少某些内容,请帮助和指导我。 在我的 MainActivity.java 中
我正在使用 fetch 来获取数据,但它一直将 promise 返回为待处理。我看过很多关于这个问题的帖子,并尝试了所有的可能性,但没有解决我的问题。我想知道为什么 fetch 简要地返回 promi
你好,我有以下在我的应用程序中显示通知的功能,但是我突然开始遇到一个问题,当我单击通知时它不会将我带到我在 .setContentIntent() 中指定的 Activity ,这是我的代码: @Ta
我正在创建一个数据处理程序,作为该过程的一部分,我需要下载一个文件,然后作为处理程序的一部分进行解析和使用。 我将对文件的请求包装在一个 promise 中,并从其他方法异步调用该方法 我已经包含了来
我想做的是通过intent传递数据, >创建者 intent = new Intent(this, AlarmReceiverActivity.class); intent.putExtra("id"
我正在使用 PingService.java 的代码 https://github.com/android/platform_development/blob/master/samples/train
我需要在用户靠近给定地点时通知他。我为此使用地理围栏 API。当我使用模拟位置在 Android 模拟器上测试应用程序时,一切正常。与模拟位置的真实设备相同。但是当我走路并且我的手机处于深度 slee
我有一个显示随机数的简单小部件。点击时它会刷新并显示另一个随机数。这是 AppWidgetProvider 的 onUpdate 方法的代码 public void onUpdate(Context
PendingIntent 中的一个新 PendingIntent 字段是 FLAG_IMMUTABLE。 在31中,必须指定MUTABLE或IMMUTABLE,否则不能创建PendingIntent
我是一名优秀的程序员,十分优秀!