如何从promise闭包更新对象变量



我有一些对象变量,我想在promiseguzzle中用闭包更新:

foreach ($urls as $i => $url) {
$this->facebook[$url] = 0;
$this->googlePlus[$url] = 0;
$this->pinterest[$url] = 0;
$this->twitter[$url] = 0;
$this->metaResults[$url] = [
'url' => false,
'title' => false,
'desc' => false,
'h1' => false,
'word_count' => 0,
'keyword_count' => 0
];
$that = $this;
$promise = $client->getAsync($url)->then(function ($content) {
return $content->getBody()->getContents();
})->then(function($html) use (&$url, &$that) {
$that->metaResults[$url] = $this->parseMeta($html);
});
$promeses['meta'][$url] = $promise;
}
$responses = PromiseUtils::settle($promises)->wait();

正如你在$that->metaResults[$url] = $this->parseMeta($html);上面看到的问题,这个永远不会保存在那个对象var上。有办法做到这一点吗?

在我看来似乎没有什么错误。若您想使用$url和$that,那个么不应该将其传递给第一个使用promise的then方法注册的回调。另外,我认为$this在then()注册的回调中是不可访问的。尽管你需要检查一下这个美元。

$promise = $client->getAsync($url)
->then(function (ResponseInterface $content) use ($url, $that) {
return $content->getBody()->getContents();
})
->then(function($html) use ($url, $that) {
$that->metaResults[$url] = $this->parseMeta($html);
});
$promeses['meta'][$url] = $promise;

参考

相关内容

  • 没有找到相关文章

最新更新