【发布时间】:2017-10-19 18:55:09
【问题描述】:
我有以下几点:
resolutionTestBuilder.buildTests().then(function(tests) {
var s = tests; // checking result
});
buildTests 看起来像这样:
resolutionTestBuilder.buildTests = function () {
Promise.all([createAllResolutions(), deviceScanner.scanDevices()])
.spread(function (resolutions, videoDevices) {
var tests = [];
resolutions.forEach(function (targetResolution) {
videoDevices.forEach(function (videoDevice) {
tests.push({ device: videoDevice, resolution: targetResolution });
});
});
return tests;
});
}
createAllResolutions 看起来像这样:
var createAllResolutions = function () {
for (let y = maxHeight; y >= minHeight; y--) {
resolutions.push(
{x:x,y:y}
);
}
return resolutions;
}
最后,scanDevices 看起来像这样:
deviceScanner.scanDevices = function() {
navigator.mediaDevices.enumerateDevices().then(function(availableDevices) {
var videoDevices = [];
for (var i = 0; i < availableDevices.length; ++i) {
if (availableDevices[i].kind === 'videoinput') {
videoDevices.push({ label: availableDevices[i].label || 'camera ' + (videoDevices.length + 1), id: availableDevices[i].deviceId });
}
}
return videoDevices;
});
}
我看到的行为是 .spread 参数部分完成 - 我得到 resolutions 但不是 videoDevices。这是我第一次尝试承诺(和蓝鸟),所以我可能在这里遗漏了一些非常基本的东西——我做错了什么?
【问题讨论】:
-
resolutionTestBuilder.buildTests不返回任何内容?deviceScanner.scanDevices也没有 -
@JaromandaX - 我试图在这里返回
tests- 我想我真的把流程搞砸了。我应该回报承诺吗? -
return Promise.all ....和return navigator.mediaDevices.enumerateDevices().then ...等可能是票...就像任何功能一样,如果您不返回任何内容,则不会返回任何内容(从技术上讲,undefined会返回)跨度> -
@JaromandaX 做到了 - 谢谢 :)
标签: javascript promise bluebird es6-promise