Я хочу создать окно и когда он будет создан, запустите функцию, которая была предварительно загружена. Мне нужно подождать, пока не будет создано окно, иначе функция не будет доступна и не будет выполнена. И я бы сказал, что могу сделать это с обещанием.javascript, создать окно в веб-приложении Chrome, как включить обещание для успешного вызова функции нового окна?
Как это сделать? Здесь есть код с моей попытки сделать это
one().then(function() {
new_panel.contentWindow.load_content(something);
})
function one() {
var promise = chrome.app.window.create('empty.html',
{
id: 'protein_panel',
outerBounds: {
width: 300,
height: 800,
},
},
function(createdWindow) {
createdWindow.contentWindow.load_content = function(data) {
createdWindow.contentWindow.document.getElementById('loading_content').appendChild(data);
}
new_panel = createdWindow;
});
return promise;
}
Он жалуется на то функции один(): Uncaught TypeError: Не удается прочитать свойство «то» неопределенной
UPDATE: Слегка изменен код, по-прежнему не работает, я использовал обещание от углового, поскольку я использую его
one().then(function() {
new_panel.contentWindow.load_content(something);
})
function one() {
return chrome.app.window.create('empty.html',
{
id: 'protein_panel',
outerBounds: {
width: 300,
height: 800,
},
},
function(createdWindow) {
createdWindow.contentWindow.load_content = function(data) {
createdWindow.contentWindow.document.getElementById('loading_content').appendChild(data);
}
new_panel = createdWindow;
var deferred = $q.defer();
deferred.resolve();
console.log(deferred.promise)
return deferred.promise;
});
}
В теории deferred.promise должна быть возвращена только тогда, когда она будет решена, но это как и то() функция выполняется до того, как она на самом деле произойдет. Зачем?
UPDATE2: или другой способ сделать то же самое (не работает либо)
one();
function one() {
chrome.app.window.create('empty.html',
{
id: 'protein_panel',
outerBounds: {
width: 300,
height: 800,
},
},
function(createdWindow) {
createdWindow.contentWindow.load_content = function(data) {
createdWindow.contentWindow.document.getElementById('loading_content').appendChild(data);
}
new_panel = createdWindow;
var deferred = $q.defer();
deferred.resolve();
console.log('first '+deferred.promise)
return deferred.promise;
}).then(function() {
console.log('second')
new_panel.contentWindow.load_content(something);
});
}
В журнале «второй» выводится перед «первым». Что-то не так с кодом?
Как именно это «жаловаться»? Что такое возвращаемое значение 'chrome.app.window.create (' ... ')'? Другими словами, каково возвращаемое значение 'one()'? – Xufox
Uncaught TypeError: Невозможно прочитать свойство «then» неопределенного, а значение обещания не определено – Gerard
Там вы идете. «обещание» - это не обещание, а «неопределенное». – Xufox